Moment: Kebingungan atas moment.utz dengan MySQL DateTime

Dibuat pada 18 Apr 2016  ·  3Komentar  ·  Sumber: moment/moment

Saya telah menulis tes kecil di sini: https://jsfiddle.net/vrdhcuey/1/

Ketika kami meminta dari database kami mendapatkan DATETIME dari database MySQL kembali (awalnya disetel ke zona waktu UTC default tetapi juga diuji dengan itu ditetapkan sebagai Eropa/Dublin sebagai zona waktu) dari 2016-04-22T16:00:00.000Z - artinya tanggal akhir objek kami adalah Jumat 22 April, jam 4 sore. Ini pada kenyataannya tidak memiliki zona waktu karena semua yang kami katakan adalah bahwa acara tersebut dapat berakhir pada pukul 4 sore pada tanggal tertentu, tetapi tanggal tersebut dapat jatuh dalam GMT atau BST.

Dalam tes yang disediakan, kami ingin mendapatkan durasi antara sekarang dan waktu itu. Namun selalu satu jam libur. Satu-satunya cara untuk mengatasinya adalah dengan menghapus .000Z dari akhir string datetime. Saya juga mencoba menggunakan moment.tz tetapi mendapatkan hasil yang sama (yaitu dalam pengujian ini leftTime4 adalah perilaku yang benar yang kami harapkan). Namun saya berharap leftTime2 berfungsi apa adanya.

Adakah yang bisa menjernihkan kebingungan ini, atau apakah saya menemukan bug di sini?

Komentar yang paling membantu

Standar ISO8601 menetapkan bahwa tanggal yang diakhiri dengan Z harus ditafsirkan sebagai UTC. Dengan demikian, momen apa yang dilakukan ketika menghabiskan waktu Anda adalah mengubah waktu dari UTC ke lokal. Ini adalah bagaimana Anda mendapatkan satu jam off situasi Anda.

Jika Anda ingin sejenak mengabaikan Z (menafsirkan waktu sebagai lokal), Anda dapat menentukan format yang tidak menangkap Z dengan melakukan hal berikut:

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

Jika Anda menginginkan informasi lebih lanjut tentang berbagai mode penguraian, bagian panduan ini mungkin berguna: http://momentjs.com/guides/#/parsing/local -utc-zone/

Semua 3 komentar

Standar ISO8601 menetapkan bahwa tanggal yang diakhiri dengan Z harus ditafsirkan sebagai UTC. Dengan demikian, momen apa yang dilakukan ketika menghabiskan waktu Anda adalah mengubah waktu dari UTC ke lokal. Ini adalah bagaimana Anda mendapatkan satu jam off situasi Anda.

Jika Anda ingin sejenak mengabaikan Z (menafsirkan waktu sebagai lokal), Anda dapat menentukan format yang tidak menangkap Z dengan melakukan hal berikut:

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

Jika Anda menginginkan informasi lebih lanjut tentang berbagai mode penguraian, bagian panduan ini mungkin berguna: http://momentjs.com/guides/#/parsing/local -utc-zone/

Benar - jadi, perbaikan sebenarnya adalah, jangan memancarkan Z dari bagian belakang Anda jika Anda tidak benar-benar bermaksud UTC.

@ mj1856 Ya mencoba, tapi saya ingin tahu apakah masalahnya terletak pada Sequlize daripada MySQL itu sendiri - ketika kami menjalankan kueri terhadap DB secara langsung, itu hanya memancarkan DATETIME biasa dengan YYYY-MM-DD HH:MM:SS, seperti yang disimpan . Mengubah zona waktu DB sepertinya tidak ada bedanya. Bagaimanapun hal di atas tampaknya memperbaikinya untuk saat ini, kita akan melihat apakah itu bertahan ketika kita kembali ke GMT :bomb:

Apakah halaman ini membantu?
0 / 5 - 0 peringkat