Mengapa hari libur jam 1 dan jam libur pada mor ISO 8601 di Moment js?

Dengan string ISO 8601, saya menggunakan Moment js dan saat ini melakukan moment("2014-05-08T00:20:40Z").format("HH:mm:ss") untuk sekadar mendapatkan waktu string "00:20:40", tapi


person Community    schedule 28.09.2016    source sumber
comment
z pada stempel waktu berarti UTC, jadi tebakan terbaik saya adalah Anda tidak berada dalam zona waktu UTC, jadi stempel waktu tersebut diformat ke dalam zona waktu Anda   -  person Derek Pollard    schedule 28.09.2016


Jawaban (1)


Tanggal ISO Anda adalah tanggal UTC. Itulah arti Z di akhir. Jadi Anda berada 7 zona waktu di sebelah barat UTC.

Waktu Anda memulai adalah 20 menit setelah tengah malam pada tanggal 8. Jika Anda menjalankan kode di Paris, Prancis, Anda akan mendapatkan jawaban yang benar (mengabaikan penyesuaian "waktu musim panas"). Namun, karena Anda berada di 7 zona waktu barat, Anda mendapat pukul 5.20 sore, dan Anda masih berada di hari kalender sebelumnya.

Dengan satu cara memandang sesuatu, tidak ada yang perlu "diperbaiki". Versi waktu lokal berdasarkan tempat Anda berada mewakili titik waktu yang sama dengan waktu ISO UTC asli. Semuanya bekerja dengan baik; representasi default nilai tanggal adalah dalam waktu lokal. Objek primitif Tanggal di JavaScript memiliki API untuk mengakses komponen dalam istilah UTC jika Anda ingin melakukannya.

Anda dapat menggunakan .toISOString() jika Anda ingin mendapatkan kembali string ISO asli:

moment("2014-05-08T00:20:40Z").toISOString()

Atau, Anda dapat menyertakan tag zona waktu dalam string format Anda:

moment("2014-05-08T00:20:40Z").format("HH:mm:ss zz")

(Perhatikan bahwa "z" dalam string format tidak berarti sama dengan "Z" dalam waktu ISO. Itu hanya karakter khusus pemformatan, dari huruf pertama kata "zona". Dalam string ISO , ini adalah huruf pertama dari kata "nol", artinya waktu berada pada titik nol dari waktu UTC. Beberapa orang menyebutnya "Waktu Zulu" karena "Z".)

person Pointy    schedule 28.09.2016
comment
Benar, tapi lihat juga: maggiepint.com/2016 /05/14/momen-js-menunjukkan-tanggal-yang-salah. Sebagai alternatif, Anda mungkin perlu menggunakan fungsi pabrik yang benar untuk kasus penggunaan Anda. - person Maggie Pint; 28.09.2016
comment
@MaggiePint itu artikel yang bagus; selalu sulit untuk mengatakan dalam pertanyaan SO seperti ini apa konteks yang lebih besar. Misalnya, dari mana tanggal ISO UTC itu berasal? Bisa jadi solusi paling sederhana di sini adalah mengubah format di server. Itupun tergantung pada semantik aplikasi. Terima kasih, itu bagus dan saya akan mencoba mengingat untuk menautkannya (seperti yang Anda katakan, ini selalu muncul!). - person Pointy; 28.09.2016