Moment: startOf ('day') / endOf ('day') غير صحيح مع UTC

تم إنشاؤها على ٢٤ يناير ٢٠١٤  ·  3تعليقات  ·  مصدر: moment/moment

عند استخدام التوقيت المحلي ، تعمل وظيفة startOf ('day') / endOf ('day') كما هو متوقع ، ولكن عند استخدام التوقيت UTC ، يتم التعامل مع القيمة مثل التوقيت المحلي.

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

Moment.lang ('nl') ؛
فار t1 = لحظة () ؛ // الوقت المحلي
var t2 = t1.clone (). utc () ؛ // التوقيت العالمي

console.log ('LOC valueOf =' + t1.valueOf ()) ؛ // 1390557395517 -> موافق
console.log ('UTC valueOf =' + t2.valueOf ()) ؛ // 1390557395517 -> موافق

console.log ('LOC end of day valueOf =' + t1.endOf ('day'). valueOf ()) ؛ // 1390604399999 -> موافق
console.log ('UTC end of day valueOf =' + t2.endOf ('day'). valueOf ()) ؛ // 1390607999999 -> لا بأس به

console.log ('LOC end of day _d =' + t1.endOf ('day') ._ d) ؛ // الجمعة 24 كانون الثاني (يناير) 2014 23:59:59 GMT + 0100 (توقيت غرب أوروبا القياسي) -> حسنًا
console.log ('نهاية اليوم UTC _d =' + t2.endOf ('اليوم') ._ d) ؛ // السبت 25 يناير 2014 00:59:59 GMT + 0100 (توقيت غرب أوروبا القياسي) -> لا بأس

مع أطيب التحيات،
بيورن

Troubleshooting

التعليق الأكثر فائدة

يبدو أنك تسأل لماذا يمنحك m.utc().endOf('day') نهاية اليوم بالتوقيت العالمي المنسق بدلاً من التوقيت المحلي. هذا حسب التصميم. يعني utc() "تعامل مع الوقت كما لو كان التوقيت العالمي المنسق" ، حيث تكون نهاية اليوم 23:59:59 _ in UTC_ ، أي بعد ساعة في غرب أوروبا. إنها نفس الطريقة التي يعمل بها offset() ؛ بمجرد أن تكون اللحظة في تعويض UTC معين ، تعمل عملياتها في هذا السياق.

بعبارة أخرى ، يقول هؤلاء أشياء مختلفة جدًا (أنا على الساحل الشرقي للولايات المتحدة):

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"

أتمنى أن يساعد ذلك.

ال 3 كومينتر

ما هو إصدار Moment هذا؟ d ليس خاصية في كائن Moment (على الأقل ، بعد الآن). هناك _d ، والذي لا يجب عليك بالتأكيد الرجوع إليه والذي سيكون مضللاً للغاية هنا. بالنسبة للمسألة الفعلية ، فهي تعمل بشكل جيد بالنسبة لي:

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

لذا أظن أنك في نسخة ما قبل التاريخ؟

أنا أستخدم الإصدار 2.5.0.

الخاصية '_d' هي ما أستخدمه لمعرفة القيمة التي تحتويها Moment أثناء التصحيح. (آسف لسوء الفهم). ولكن لماذا تختلف هذه الخاصية عن التوقيت المحلي مقابل التوقيت العالمي المنسق؟ كلاهما له منطقة زمنية +0100 بدلاً من +0100 للتوقيت المحلي و +0000 للتوقيت العالمي المنسق. انظر http://jsfiddle.net/3d9eU/5/

بالتوقيت المحلي: الجمعة 24 يناير 2014 23:59:59 GMT + 0100 (توقيت غرب أوروبا القياسي)
UTC: السبت 25 يناير 2014 00:59:59 GMT + 0100 (توقيت غرب أوروبا القياسي) يجب ألا يكون هذا هو الجمعة 24 يناير 2014 23:59:59 GMT + 0100 (توقيت غرب أوروبا القياسي) مع الخاصية _isUTC = true ؟

يبدو أنك تسأل لماذا يمنحك m.utc().endOf('day') نهاية اليوم بالتوقيت العالمي المنسق بدلاً من التوقيت المحلي. هذا حسب التصميم. يعني utc() "تعامل مع الوقت كما لو كان التوقيت العالمي المنسق" ، حيث تكون نهاية اليوم 23:59:59 _ in UTC_ ، أي بعد ساعة في غرب أوروبا. إنها نفس الطريقة التي يعمل بها offset() ؛ بمجرد أن تكون اللحظة في تعويض UTC معين ، تعمل عملياتها في هذا السياق.

بعبارة أخرى ، يقول هؤلاء أشياء مختلفة جدًا (أنا على الساحل الشرقي للولايات المتحدة):

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"

أتمنى أن يساعد ذلك.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

dbshwang picture dbshwang  ·  3تعليقات

dogukankotan picture dogukankotan  ·  3تعليقات

alvarotrigo picture alvarotrigo  ·  3تعليقات

chitgoks picture chitgoks  ·  3تعليقات

danieljsinclair picture danieljsinclair  ·  3تعليقات