2017-09-16 2 views
0

Ich bin neu in JavaScript. Ich führe meinen Code aus, der basierend auf der Eingabe berechnet, wie lange ein Benutzer am Leben war. Wenn Sie möchten, dass der Code ausgeführt wird, ist er auf meinem Klassen-Testserver unter here verfügbar.setInterval() funktioniert nicht richtig

Das Problem mit meinem Code ist, dass setInterval() nicht richtig funktioniert. Aus meiner Sicht sollte meine HTML-Seite alle 1000ms (1s) mit der neuesten Zeit aktualisiert werden, aber es tut nichts, es wird nicht aktualisiert.

Ich habe setInterval() zuvor auf einem ähnlichen Projekt, das die Anzahl der Sekunden seit der Epoche angezeigt und es hat gut funktioniert. Es aktualisiert die Sekunden wie es sollte. Vielleicht gibt es etwas anderes in meinem Code, damit es nicht funktioniert? Ich habe meinen Code durch jslint und jshint ausgeführt und kann den Fehler nicht finden, den ich mache.

Vielen Dank im Voraus!

function getUserBirthday(myEpoch) { 
    "use strict"; 
    var unixEpoch = new Date()/1000.0; 
    var secondSince = unixEpoch - myEpoch; 
    var leftOrAlive = ""; 
    if (secondSince < 0) { 
     leftOrAlive = ": Seconds Left"; 
     secondSince = secondSince * -1; 
    } else { 
     leftOrAlive = ": Seconds Alive"; 
    } 
    document.getElementById("secondsAlive").innerHTML = secondSince + leftOrAlive; 
    var years = secondSince/31556926; 
    secondSince = secondSince % 31556926; 
    var months = secondSince/2629743; 
    secondSince = secondSince % 2629743; 
    var days = secondSince/86400; 
    secondSince = secondSince % 86400; 
    var hours = secondSince/3600; 
    secondSince = secondSince % 3600; 
    var minutes = secondSince/60; 
    secondSince = secondSince % 60; 
    var seconds = secondSince; 
    //Convert Variables To String 
    years = years.toString(); 
    months = months.toString(); 
    days = days.toString(); 
    hours = hours.toString(); 
    minutes = minutes.toString(); 
    seconds = seconds.toString(); 
    //Remove Trailing Decimal Places 
    var yearStr = years.slice(0, (years.indexOf("."))); 
    var monthStr = months.slice(0, (months.indexOf("."))); 
    var dayStr = days.slice(0, (days.indexOf("."))); 
    var hourStr = hours.slice(0, (hours.indexOf("."))); 
    var minuteStr = minutes.slice(0, (minutes.indexOf("."))); 
    var secondStr = seconds.slice(0, (seconds.indexOf("."))); 
    //Show Results 
    document.getElementById("years").innerHTML = yearStr + ": Years"; 
    document.getElementById("months").innerHTML = monthStr + ": Months"; 
    document.getElementById("days").innerHTML = dayStr + ": Days"; 
    document.getElementById("hours").innerHTML = hourStr + ": Hours"; 
    document.getElementById("minutes").innerHTML = minuteStr + ": Minutes"; 
    document.getElementById("seconds").innerHTML = secondStr + ": Second 
} 

function updateTimeSinceEpoch() { 
    "use strict"; 
    var strDate = prompt("Enter your birthday: ex. November 12, 1996 00:00:00"); 
    document.getElementById("birthday").innerHTML = strDate; 
    var myDate = new Date(strDate); // Your timezone! 
    var myEpoch = myDate.getTime()/1000.0; 
    var runFunction = getUserBirthday(myEpoch); 
    setInterval(runFunction, 1000); 
} 
+6

Sie haben einen Syntaxfehler mit der letzten Zeile von getUserBirthday. – Blauharley

Antwort

2

Wenn Sie verwenden:

var runFunction = getUserBirthday(myEpoch); 
setInterval(runFunction, 1000); 

die runFunction Variable ist undefined, weil getUserBirthday() Methode nicht alles zurück. Also mit dieser Struktur wird Ihre Funktion nur einmal ausgeführt werden:

function getUserBirthday(message) { 
 
    console.log(message); 
 
} 
 

 
var runFunction = getUserBirthday("Hello"); 
 
setInterval(runFunction, 1000);

Versuchen Sie, die folgende Struktur zu verwenden, sollte es den Trick:

function getUserBirthday(message) { 
 
    console.log(message); 
 
} 
 

 
setInterval(function() { 
 
    getUserBirthday('Hello'); 
 
}, 1000);

+1

Vielen Dank für Ihre Antwort, Ihre Lösung hat funktioniert !!! –

+0

@BrayanCastro, gern geschehen –

Verwandte Themen