Secara default, MomentJS mengurai dalam waktu lokal. Jika hanya string tanggal (tanpa waktu) yang disediakan, default waktunya adalah tengah malam.
Dalam kode Anda, Anda membuat tanggal lokal dan kemudian mengonversinya ke zona waktu UTC (pada kenyataannya, itu membuat momen instan beralih ke mode UTC ), jadi ketika diformat, itu bergeser (tergantung pada waktu lokal Anda) maju atau ke belakang.
Jika zona waktu lokal adalah UTC + N (N adalah angka positif), dan Anda mengurai string khusus tanggal, Anda akan mendapatkan tanggal sebelumnya.
Berikut adalah beberapa contoh untuk mengilustrasikannya (offset waktu lokal saya adalah UTC + 3 selama DST):
>>> moment('07-18-2013', 'MM-DD-YYYY').utc().format("YYYY-MM-DD HH:mm")
"2013-07-17 21:00"
>>> moment('07-18-2013 12:00', 'MM-DD-YYYY HH:mm').utc().format("YYYY-MM-DD HH:mm")
"2013-07-18 09:00"
>>> Date()
"Thu Jul 25 2013 14:28:45 GMT+0300 (Jerusalem Daylight Time)"
Jika Anda ingin string tanggal-waktu ditafsirkan sebagai UTC, Anda harus menjelaskannya secara eksplisit:
>>> moment(new Date('07-18-2013 UTC')).utc().format("YYYY-MM-DD HH:mm")
"2013-07-18 00:00"
atau, seperti yang disebutkan Matt Johnson dalam jawabannya, Anda dapat ( dan mungkin harus ) menguraikannya sebagai tanggal UTC sejak awal menggunakan moment.utc()
dan menyertakan string format sebagai argumen kedua untuk mencegah ambiguitas.
>>> moment.utc('07-18-2013', 'MM-DD-YYYY').format("YYYY-MM-DD HH:mm")
"2013-07-18 00:00"
Untuk sebaliknya dan mengubah tanggal UTC menjadi tanggal lokal, Anda dapat menggunakan local()
metode ini, sebagai berikut:
>>> moment.utc('07-18-2013', 'MM-DD-YYYY').local().format("YYYY-MM-DD HH:mm")
"2013-07-18 03:00"
toString()
setelahformat()
(itu sudah mengembalikan string).