Deskripsi Masalah dan Langkah-langkah untuk Mereproduksi:
Katakanlah saya menerima tanggal dari backend dalam format ini:
"2018-10-10T13:00:00+11:00"
Apa yang saya harapkan untuk dilihat di frontend setelah penguraian dan pemformatan:
10-10-2018 1.00 PM
Apa yang saya dapatkan:
10-10-2018 5.00 AM
Saya tidak peduli apa zona waktu sistem saya. Saya juga tidak ingin melihat waktu UTC. Bagaimana saya bisa mencapainya?
Harap sertakan nilai dari semua variabel yang digunakan.
Lihat di atas.
Lingkungan:
Tidak masalah, tidak harus bergantung pada lingkungan. Itu masalahnya, btw, karena itu tergantung!
Afaik, momen default untuk menggunakan zona waktu perangkat saat memformat tanggal (yang juga merupakan perilaku standar Javascript). Jadi ya, memformat tanggal harus bergantung pada lingkungan. Misalnya, di perangkat saya, saya mendapatkan ini untuk kencan Anda, yang merupakan waktu yang tepat untuk waktu lokal saya (Auckland):
moment("2018-10-10T13:00:00+11:00").format()
// => '2018-10-10T15:00:00+13:00'
Jika Anda ingin menetapkan zona waktu default untuk pengguna secara manual, Anda dapat menggunakan moment-timezone
dengan nama zona waktu IANA :
moment.tz.setDefault('America/New_York');
Itu akan memberlakukan semua pemformatan yang harus dilakukan untuk zona waktu itu dan tidak bergantung pada lingkungan.
Berikut tautan ke dokumen: https://momentjs.com/timezone/docs/#/using -timezones/default-timezone/
Tidak mungkin untuk mengetahui zona waktu pengguna dari offset (karena beberapa zona waktu dapat berbagi offset yang sama, misalnya tergantung pada waktu musim panas) tetapi Anda dapat menggunakan nama zona Etc
untuk zona "generik", misalnya Etc/GMT-11
dalam kasus Anda (tanda terbalik untuk zona tersebut). Dalam kasus Anda, mungkin lebih masuk akal untuk menyimpan zona waktu pengguna sebagai pengaturan dan mempertahankannya di server, atau menyimpannya bersama dengan stempel waktu.
Kemudian Anda dapat mencetak satu tanggal dalam zona waktu tertentu dengan menggunakan mis
moment.tz("2018-10-10T13:00:00+11:00", "America/New_York");
Terima kasih, @simonhaenisch
Saya telah melihat plugin tz, tetapi saya pikir ini membantu mengelola zona waktu, seperti mengonversi dari satu ke yang lain . Dan kedengarannya aneh bagi saya untuk menggunakannya hanya untuk TIDAK menyentuh zona waktu sama sekali :)
Jika Anda ingin mengatur zona waktu default untuk pengguna secara manual
Sayangnya, tidak ada zona waktu default
di server. Setiap pengguna memiliki zona waktu mereka sendiri, disimpan di profil. Dan frontend tidak tahu apa-apa tentang itu.
Tidak mungkin mengetahui zona waktu pengguna dari offset
Tidak apa-apa, saya tidak peduli dengan zona waktu. Yang saya butuhkan hanyalah menjaga tanggal yang akan datang tanpa perubahan.
simpan zona waktu pengguna sebagai pengaturan dan simpan di server, atau simpan bersama dengan stempel waktu.
Inilah yang sebenarnya terjadi. Zona waktu adalah pengaturan dan tanggal yang disimpan sebagai stempel waktu.
Karena API backend berada di bawah kendali saya, saya hanya dapat mengirim versi tanggal yang dikurangi, tanpa offset zona waktu. Saya harap ini membantu.
Tapi, sangat menarik mengapa moment.js tidak memiliki sesuatu seperti itu:
moment(somDateTime).format({ formatWithDeviceTimezone: true })
atau semacam :)
Di mana formatWithDeviceTimezone
salah secara default.
Bagaimanapun, terima kasih, sekarang saya melihat masalahnya.
Anda dapat mencoba parseZone
:
misalnya untuk zona waktu lokal di BST (UTC + 1)
moment.parseZone("2018-10-10T13:00:00+11:00").format(); // "2018-10-10T13:00:00+11:00"
moment.parseZone("2018-10-10T13:00:00+11:00").local().format(); // "2018-10-10T03:00:00+01:00"
moment.parseZone("2018-10-10T13:00:00+11:00").utc().format(); // "2018-10-10T02:00:00Z"
Komentar yang paling membantu
Anda dapat mencoba
parseZone
:misalnya untuk zona waktu lokal di BST (UTC + 1)