Moment: startOf('day')/endOf('day') nicht korrekt mit UTC

Erstellt am 24. Jan. 2014  ·  3Kommentare  ·  Quelle: moment/moment

Bei Verwendung der Ortszeit funktioniert die Funktion startOf('day')/endOf('day') wie erwartet, aber wenn ich UTC-Zeit verwende, wird der Wert wie Ortszeit behandelt.

http://jsfiddle.net/3d9eU/5/

moment.lang('nl');
var t1 = Moment (); // Ortszeit
var t2 = t1.clone().utc(); // KOORDINIERTE WELTZEIT

console.log('LOC valueOf = ' + t1.valueOf()); //1390557395517 -> OK
console.log('UTC valueOf = ' + t2.valueOf()); // 1390557395517 -> OK

console.log('LOC Tagesende valueOf = ' + t1.endOf('day').valueOf()); //1390604399999 -> OK
console.log('UTC Tagesende valueOf = ' + t2.endOf('day').valueOf()); //1390607999999 -> NICHT OK

console.log('LOC Tagesende _d = ' + t1.endOf('day')._d); //Freitag 24. Januar 2014 23:59:59 GMT+0100 (Westeuropäische Standardzeit) -> OK
console.log('UTC Tagesende _d = ' + t2.endOf('day')._d); //Sa 25 Jan 2014 00:59:59 GMT+0100 (Westeuropäische Standardzeit) -> NICHT OK

Mit freundlichen Grüßen,
Björn

Troubleshooting

Hilfreichster Kommentar

Es hört sich so an, als würden Sie fragen, warum m.utc().endOf('day') Ihnen das Ende des Tages in UTC und nicht in Ihrer Ortszeit anzeigt. Das ist beabsichtigt. utc() bedeutet „behandle die Zeit wie UTC“, wobei das Ende des Tages 23:59:59 _in UTC_ ist, was in Westeuropa eine Stunde später ist. Es ist genauso wie offset() funktioniert; Sobald sich der Moment in einem bestimmten UTC-Offset befindet, funktionieren seine Operationen in diesem Kontext.

Mit anderen Worten, diese sagen sehr unterschiedliche Dinge aus (ich bin an der US-Ostküste):

moment().utc().endOf('day').toString(); //=> "Sat Jan 25 2014 23:59:59 GMT+0000"
moment().endOf('day').utc().toString(); //=> "Sun Jan 26 2014 04:59:59 GMT+0000"

Ich hoffe das hilft.

Alle 3 Kommentare

Welche Version von Moment ist das? d ist keine Eigenschaft des Moment-Objekts (zumindest nicht mehr). Es gibt ein _d , auf das Sie sich definitiv nicht beziehen sollten und das hier sehr irreführend wäre. Was das eigentliche Problem betrifft, es funktioniert gut für mich:

moment().utc().endOf('day').format(); //=> '2014-01-24T23:59:59+00:00'

Also schätze ich, du bist auf einer prähistorischen Version?

Ich verwende Version 2.5.0.

Die Eigenschaft '_d' verwende ich, um zu sehen, welchen Wert Moment während des Debuggens enthält. (Entschuldigung für das Missverständnis). Aber warum unterscheidet sich diese Eigenschaft zwischen Ortszeit und UTC? Beide haben die Zeitzone +0100 anstelle von +0100 für Ortszeit und +0000 für UTC. siehe http://jsfiddle.net/3d9eU/5/

Ortszeit: Freitag, 24. Januar 2014, 23:59:59 Uhr GMT+0100 (westeuropäische Standardzeit)
UTC: Sa, 25. Januar 2014, 00:59:59 Uhr GMT+0100 (westeuropäische Standardzeit), sollte dies nicht Fr, 24. Januar 2014, 23:59:59 Uhr GMT+0100 (westeuropäische Standardzeit) mit der Eigenschaft _isUTC = true sein ?

Es hört sich so an, als würden Sie fragen, warum m.utc().endOf('day') Ihnen das Ende des Tages in UTC und nicht in Ihrer Ortszeit anzeigt. Das ist beabsichtigt. utc() bedeutet „behandle die Zeit wie UTC“, wobei das Ende des Tages 23:59:59 _in UTC_ ist, was in Westeuropa eine Stunde später ist. Es ist genauso wie offset() funktioniert; Sobald sich der Moment in einem bestimmten UTC-Offset befindet, funktionieren seine Operationen in diesem Kontext.

Mit anderen Worten, diese sagen sehr unterschiedliche Dinge aus (ich bin an der US-Ostküste):

moment().utc().endOf('day').toString(); //=> "Sat Jan 25 2014 23:59:59 GMT+0000"
moment().endOf('day').utc().toString(); //=> "Sun Jan 26 2014 04:59:59 GMT+0000"

Ich hoffe das hilft.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen