Moment: الارتباك بشأن Moment.utz مع MySQL DateTime

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

لقد كتبت اختبارًا صغيرًا هنا: https://jsfiddle.net/vrdhcuey/1/

عندما نطلب من قاعدة البيانات ، نحصل على DATETIME من قاعدة بيانات MySQL مرة أخرى (تم ضبطه في البداية على المنطقة الزمنية الافتراضية UTC ولكن تم اختباره أيضًا مع تعيين أوروبا / دبلن كمنطقة زمنية) 2016-04-22T16:00:00.000Z - وهذا يعني نهاية التاريخ والوقت هدفنا هو الجمعة 22 أبريل ، الساعة 4 مساءً. هذا في الواقع بلا منطقة زمنية لأن كل ما نقوله هو أن الحدث يمكن أن ينتهي في الساعة 4 مساءً في تاريخ معين ، ولكن هذا التاريخ قد يقع في توقيت غرينتش أو بتوقيت جرينتش.

في الاختبار المقدم ، نريد الحصول على المدة من الآن إلى ذلك التاريخ والوقت. ومع ذلك فهي دائما ساعة راحة. الطريقة الوحيدة للتغلب عليها هي إزالة .000Z من نهاية سلسلة التاريخ والوقت. لقد حاولت أيضًا استخدام Mom.tz ولكن لدي نفس النتيجة (على سبيل المثال ، في هذا الاختبار ، يكون leftTime4 هو السلوك الصحيح الذي نتوقعه). ومع ذلك كنت أتوقع أن يعمل leftTime2 كما هو.

هل يمكن لأي شخص أن يوضح هذا الالتباس ، أم أنني أصاب خطأ هنا؟

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

تحدد المواصفة القياسية ISO8601 أن التواريخ التي تنتهي بالحرف Z يجب تفسيرها على أنها التوقيت العالمي المنسق (UTC). على هذا النحو ، ما تفعله اللحظة عندما يمر وقتك هو تحويل الوقت من التوقيت العالمي المنسق إلى التوقيت المحلي. هذه هي الطريقة التي تحصل بها على موقف لمدة ساعة.

إذا كنت ترغب في تجاهل Z (تفسير الوقت على أنه محلي) للحظة ، يمكنك تحديد تنسيق لا يلتقط Z عن طريق القيام بما يلي:

moment('2016-04-22T16:00:00.000Z', 'YYYY-MM-DDTHH:mm:ss.SSS').format()

إذا كنت تريد مزيدًا من المعلومات حول أوضاع التحليل المختلفة ، فقد يكون هذا القسم من الأدلة مفيدًا: http://momentjs.com/guides/#/parsing/local -utc-zone /

ال 3 كومينتر

تحدد المواصفة القياسية ISO8601 أن التواريخ التي تنتهي بالحرف Z يجب تفسيرها على أنها التوقيت العالمي المنسق (UTC). على هذا النحو ، ما تفعله اللحظة عندما يمر وقتك هو تحويل الوقت من التوقيت العالمي المنسق إلى التوقيت المحلي. هذه هي الطريقة التي تحصل بها على موقف لمدة ساعة.

إذا كنت ترغب في تجاهل Z (تفسير الوقت على أنه محلي) للحظة ، يمكنك تحديد تنسيق لا يلتقط Z عن طريق القيام بما يلي:

moment('2016-04-22T16:00:00.000Z', 'YYYY-MM-DDTHH:mm:ss.SSS').format()

إذا كنت تريد مزيدًا من المعلومات حول أوضاع التحليل المختلفة ، فقد يكون هذا القسم من الأدلة مفيدًا: http://momentjs.com/guides/#/parsing/local -utc-zone /

حسنًا - حسنًا ، الإصلاح الحقيقي هو عدم إرسال Z من نهايتك الخلفية إذا كنت لا تقصد حقًا التوقيت العالمي المنسق.

@ mj1856 نعم حاولت ذلك ، لكنني أتساءل عما إذا كانت المشكلة تكمن في Sequlize بدلاً من MySQL نفسها - عندما نقوم بتشغيل الاستعلام مقابل DB مباشرةً ، فإنه يصدر فقط DATETIME عادي مع YYYY-MM-DD HH: MM: SS ، حيث يتم تخزينه . يبدو أن تغيير المنطقة الزمنية لقاعدة البيانات لم يحدث فرقًا. على أي حال ، يبدو أن ما ورد أعلاه يعمل على إصلاحه في الوقت الحالي ، فسنرى ما إذا كان سيصمد عندما نعود إلى توقيت جرينتش: القنبلة:

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