2014-12-11 18 views
7

Es gibt ein seltsames Verhalten der FireFox 34 setMinutes-Datumsmethode zum Festlegen der 60 Minuten für das Jahr 2008 01. Januar 23 Stunden 00 Minuten 00 Sekunden. Es wird erwartet, dass der Tag zunimmt, aber dies nicht.FireFox 34 setMinutes BUG?

var initDate = [2008, 0, 1]; 
var d = new Date(initDate[0], initDate[1], initDate[2]); 
document.body.innerHTML += d + "<br/>"; 
d.setHours(23); 
d.setMinutes(60); 
document.body.innerHTML += d + "<br/>"; 

Das FireFox 34 Ergebnis:

Tue Jan 01 2008 00:00:00 GMT+0300 (Russia TZ 2 Standard Time) 
Tue Jan 01 2008 23:00:00 GMT+0300 (Russia TZ 2 Standard Time) 

statt Chrome 39.0.2171.71 m:

Tue Jan 01 2008 00:00:00 GMT+0300 (Russia TZ 2 Standard Time) 
Wed Jan 02 2008 01:00:00 GMT+0400 (Russia TZ 2 Daylight Time) 

Wenn ich das Jahr 2006 das Ergebnis zu ändern ist ok:

Sun Jan 01 2006 00:00:00 GMT+0300 (Russia TZ 2 Standard Time) 
Mon Jan 02 2006 00:00:00 GMT+0300 (Russia TZ 2 Standard Time) 

http://jsfiddle.net/7dp8xvf8/1/

Ist es ein Fehler?

UPDATE: IE 8 und 9 hat das gleiche Verhalten, aber 10-11 ist in Ordnung.

+2

Es ist offensichtlich, dass Chrome die Zeitzone geändert hat, FireFox jedoch nicht; Ich nehme an, Sie sind an diesem Ort selbst, gab es zu dieser Zeit eine wesentliche Veränderung? Ich konnte zu diesem Zeitpunkt nichts online finden. –

+0

Welches Verhalten siehst du, wenn du 'setMinutes' kleiner als' 60' bist? (z. B. was erzeugt 'd.setMinutes (58);'?) Ich glaube nicht, dass ich Ihr Skript testen kann, ohne die Zeitzone/den Standort meines Browsers zu ändern. – apsillers

+0

@AdrianWragg Ich bin an diesem Ort, aber vor den letzten FireFox Updates wurde das Problem nicht angezeigt. –

Antwort

0

Angesichts der specification glaube ich, dass dies in der Tat beabsichtigtes Verhalten ist. Man beachte insbesondere, dass MakeTime function keine Überlaufprüfungen enthält (d. H. Es bestimmt nicht, ob die Anzahl der Minuten weniger als 60 ist). Die MakeDate-Funktion verhält sich ähnlich; Daher folgt Firefox der Spezifikation korrekt.

+0

Nein, die Spezifikation berechnet im Wesentlichen die Anzahl der Millisekunden-seit-Tag-0 Addieren der einzelnen Komponenten. Wenn Sie also die Minuten auf 60 setzen, sollte die Stunde geändert werden. – Nickolay

0

Das ist für mich in Firefox 39.0.3 wie vorgesehen funktioniert, sowie die aktuelle Entwicklung bauen (42a), wie erhalte ich:

"Tue Jan 01 2008 00:00:00 GMT+0300 (MSK)" 
"Wed Jan 02 2008 00:00:00 GMT+0300 (MSK)" 

Dies ist, was auch die ES-Spezifikation erfordert.

Wenn dies immer noch nicht für Sie funktioniert (was überraschend wäre), und besonders wenn Sie zeitzonenbezogene Seltsamkeit sehen, sollten Sie auch Ihre System TZ-Einstellungen erwähnen.