Moment: Apakah mungkin untuk mempertahankan zona waktu backend?

Dibuat pada 4 Okt 2018  ·  3Komentar  ·  Sumber: moment/moment

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!

Komentar yang paling membantu

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"

Semua 3 komentar

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"
Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

danieljsinclair picture danieljsinclair  ·  3Komentar

benhathaway picture benhathaway  ·  3Komentar

dbshwang picture dbshwang  ·  3Komentar

chitgoks picture chitgoks  ·  3Komentar

IbraheemAlSaady picture IbraheemAlSaady  ·  3Komentar