تشغيل الكود التالي في Chrome الإصدار 49.0.2623.110 م
ربما تتعلق بـ # 2982؟
نظرًا لأنك تستخدم الدالة moment()
لإنشاء تاريخك ، تفترض اللحظة أنك تتعامل مع تاريخ محلي. وبالتالي ، فإن الوظيفة .startOf()
تنقلك إلى بداية التاريخ المحلي الخاص بك.
على الرغم من ذلك ، ينتج عن .toISOString()
تاريخ UTC ، كما هو مشار إليه بواسطة Z في نهاية السلاسل.
بناءً على ملفك الشخصي على جيثب ، يبدو أنك في إسرائيل. لذا ، تعديل المنطقة الزمنية لآسيا / القدس ووضعها كلها في الكود:
//the time now in Jerusalem
moment().format()
"2016-04-03T14:48:10+03:00"
//start of day in Jersualem
moment().startOf('day').format()
"2016-04-03T00:00:00+03:00"
//start of day as ISO string is three hours before start of day in Jerusalem
moment().startOf('day').toISOString()
"2016-04-02T21:00:00.000Z"
تحتاج إما إلى العمل بشكل كامل في التوقيت المحلي ، واستخدام .format()
للحصول على النتيجة التي تريدها ، أو العمل بالكامل في UTC.
قد يكون هذا القسم من المستندات مفيدًا:
http://momentjs.com/guides/#/parsing/local -utc-zone /
: راحة اليد:
شكرا لك على الشرح الشامل.
أعتقد أنني شرحت هذا بالفعل مرتين على الأقل هذا الأسبوع بين هنا و Stack Overflow. أنت لست الشخص الوحيد الذي يتم الخلط بينه. سأقوم بتحديث المستندات لجعل جزء UTC أكثر وضوحًا.
التعليق الأكثر فائدة
نظرًا لأنك تستخدم الدالة
moment()
لإنشاء تاريخك ، تفترض اللحظة أنك تتعامل مع تاريخ محلي. وبالتالي ، فإن الوظيفة.startOf()
تنقلك إلى بداية التاريخ المحلي الخاص بك.على الرغم من ذلك ، ينتج عن
.toISOString()
تاريخ UTC ، كما هو مشار إليه بواسطة Z في نهاية السلاسل.بناءً على ملفك الشخصي على جيثب ، يبدو أنك في إسرائيل. لذا ، تعديل المنطقة الزمنية لآسيا / القدس ووضعها كلها في الكود:
تحتاج إما إلى العمل بشكل كامل في التوقيت المحلي ، واستخدام
.format()
للحصول على النتيجة التي تريدها ، أو العمل بالكامل في UTC.قد يكون هذا القسم من المستندات مفيدًا:
http://momentjs.com/guides/#/parsing/local -utc-zone /