2009-04-23 5 views
0

Ich habe einen Teil von Skript, das die verbleibenden Tage auf ein Ereignis berechnet:Javascript Unix Epoch Zeit Fremdheit

var currTime = Math.round(new Date().getTime()/1000.0); 
var dispDate = event.find('UnixEpoch').text(); 
var diffDate = (dispDate - currTime)/86400; 
var dateRound = Math.round(diffDate) - 30; 

Die erste Zeile erhält die aktuelle Unix-Epoche Zeit und die Millisekunden shaves ab. Die zweite Zeile ruft das zukünftige Ereignisdatum aus einem XML-Feed ab. Wenn ich beide Male in einen Epochenrechner online stelle, bekomme ich das korrekte Datum für currTime und dispDate. Aber wenn ich sie in Tage dividiere (dritte Zeile), ist das Endergebnis um mehr als 30 Tage veraltet, weshalb ich die letzte Zeile verwenden muss, um die richtige Anzahl von Tagen zu erhalten.

Nun, das ist seltsam genug. Aber da ist noch etwas anderes, das ich nicht herausfinden kann. Früher war es 31 Tage alt, und das ist falsch, also habe ich das Skript auf 30 Tage geändert, was richtig ist.

Kann jemand darauf hinweisen, was ich falsch mache? Ich kann nicht für das Leben von mir herausfinden, warum das passiert, und ich würde lieber nicht weiter daran arbeiten müssen.

+4

http://xkcd.com/376/ :) – Macke

Antwort

1

Auf den ersten Blick sieht der Code OK.

versuchen, die Werte von currTime Dumping und dispDate, bevor Sie die Subtraktion tun und sehen, ob sie konsistent sind.

Der von Ihnen gemeldete Fehler weist auf einen Fehler im Monatsteil des Codes hin. Dieser Monat ist 30 Tage lang und der letzte Monat war 31 Tage lang. Der wahrscheinliche Ort des Fehlers liegt innerhalb des event.find('UnixEpoch') Aufrufs.

+0

Ich habe beide Werte mehrfach abgeladen und überprüft, und sie sind immer korrekt. Zum Beispiel ist hier ein Datum von einem bevorstehenden Ereignis, das ich gerade aus dem XML-Feed gezogen habe: 1243270800, was GMT ist: Montag, 25. Mai 2009 17:00:00 GMT, was korrekt ist. –

+0

und was gibt es aus, wenn Sie nach currTime fragen? Du weißt, dass es April ist, ja? ;-) – Alnitak

+2

Wenn ich C & P javascript: alert (Math.round (('1243270800' - Math.round (neues Date(). GetTime()/1000.0))/86400)) in meiner Browserleiste bekomme ich 32 – Alnitak

0

Wird das Ereignisdatum von anderem Javascript verarbeitet? Wenn Sie das new Date(year, month, day, etc...) Format verwenden, basiert der Monat auf Null, was leicht zu vergessen ist.

+0

Es wird von Perl erstellt. –