Saya mencari fungsi untuk mengonversi tanggal dalam satu zona waktu ke zona waktu lain.
Perlu dua parameter,
- tanggal (dalam format "2012/04/10 10:10:30 +0000")
- string zona waktu ("Asia / Jakarta")
String zona waktu dijelaskan dalam http://en.wikipedia.org/wiki/Zone.tab
Apakah ada cara mudah untuk melakukan ini?
javascript
timezone
Rizky Ramadhan
sumber
sumber
Jawaban:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleString
sumber
toLocaleString
, tetapi kemudian sangat keliru menunjukkan melewati string itu kembali keDate
konstruktor. Itu meminta masalah. Pengurai string tanggal tidak diperlukan untuk menerima format spesifik lokal, dan input akan diperlakukan seolah-olah berada di zona waktu lokal. Jangan lakukan itu. Cukup gunakan output string daritoLocalString
panggilan pertama .Untuk pengguna moment.js , Anda sekarang dapat menggunakan zona waktu-saat . Dengan menggunakannya, fungsi Anda akan terlihat seperti ini:
sumber
Date.prototype.toLocaleString
.Dicuri tanpa malu-malu dari: http://www.techrepublic.com/article/convert-the-local-time-to-another-time-zone-with-this-javascript/6016329
fungsi ini berguna untuk menghitung nilai zona waktu dengan memberikan nama kota / negara dan nilai offset
sumber
Sebagian besar browser desktop (bukan seluler) kecuali Safari mendukung fungsi toLocaleString dengan argumen, browser lama biasanya mengabaikan argumen.
sumber
toLocaleStringSupportsLocales()
implementasi yang memungkinkan Anda memeriksa dukungan secara andal.Oke, temukan!
Saya menggunakan timezone-js . ini kodenya:
sumber
Jika Anda tidak ingin mengimpor beberapa perpustakaan besar, Anda bisa menggunakan Intl.DateTimeFormat untuk mengonversi objek Date ke zona waktu yang berbeda.
Offset, daylight saving, dan perubahan di masa lalu akan diurus untuk Anda.
sumber
toLocaleString
memiliki implementasi yang tidak konsisten, dan ini berfungsi dari IE11 dan seterusnya.formatter
objek, Anda mendapatkan: `` `Nilai opsi 'Asia / Jakarta' untuk 'timeZone' di luar rentang yang valid. Diharapkan: ['UTC'] `` `Mengerti !
Ingin memaksakan tanggal yang ditampilkan = tanggal server, tidak peduli pengaturan lokal (UTC).
Server saya adalah GMT-6 -> Date baru (). GetTimezoneOffset () = 360.
sumber
Anda dapat menggunakan metode toLocaleString () untuk mengatur zona waktu.
Untuk India Anda dapat menggunakan "India / Natal" dan berikut ini adalah berbagai zona waktu,
sumber
toLocaleString
solusi itu sudah diberikan 4 tahun yang lalu .Jika Anda hanya perlu zona waktu convert Saya telah meng-upload versi dilucuti-down dari saat-zona dengan hanya functionallity minimal. Ini ~ 1KB + data:
sumber
Tetapkan variabel dengan tahun, bulan, dan hari yang dipisahkan dengan simbol '-', ditambah 'T' dan waktu dalam pola HH: mm: dd, diikuti oleh +01: 00 di akhir string (dalam kasus saya zona waktu +1). Kemudian gunakan string ini sebagai argumen untuk konstruktor tanggal.
sumber
Saya harus mencatat bahwa saya dibatasi sehubungan dengan perpustakaan eksternal yang dapat saya gunakan. moment.js dan timezone-js BUKAN merupakan pilihan bagi saya.
Objek tanggal js yang saya miliki adalah dalam UTC. Saya perlu mendapatkan tanggal DAN waktu dari tanggal ini di zona waktu tertentu ('Amerika / Chicago' dalam kasus saya).
UTC saat ini 6 jam lebih awal dari 'Amerika / Chicago'. Output adalah:
sumber
new Date();
kembalikan zona waktu setempat, bukan UTCIf no arguments are provided, the constructor creates a JavaScript Date object for the current date and time according to system settings.
Ini kode saya, ini berfungsi dengan baik, Anda dapat mencoba dengan memberikan demo di bawah ini:
sumber
currentDateTimeCentralTimeZone.getHours()
? Tanpanya itu akan bekerja dan sama dengan mencari jawaban stackoverflow.com/a/40809160/140418527Anda dapat mencoba ini juga untuk mengubah zona waktu tanggal ke India:
sumber
Setelah melihat-lihat banyak termasuk tautan dari halaman ini saya menemukan artikel yang bagus ini, menggunakan zona waktu saat:
https://www.webniraj.com/2016/11/23/javascript-using-moment-js-to-display-dates-times-in-users-timezone/
Untuk meringkasnya:
Dapatkan zona waktu pengguna
Pengembalian misalnya: Zona Waktu: Eropa / London
Tetapkan zona waktu pengguna default
Tetapkan zona waktu khusus
Ubah tanggal / waktu menjadi zona waktu lokal, asumsikan tanggal / waktu asli dalam UTC
Pengembalian: Minggu, 25 Desember 2016, 7:00 pagi
Ubah tanggal / waktu menjadi LA Time
Pengembalian: Sabtu, 24 Desember 2016, 11:00 malam
Mengkonversi dari waktu LA ke London
Pengembalian: Minggu, 25 Desember 2016, 15:00
sumber
Anda juga dapat menggunakan https://www.npmjs.com/package/ctoc_timezone
Itu telah mendapat implementasi sederhana dan kustomisasi format.
Mengubah format di toTimeZone:
CtoC.toTimeZone(new Date(),"EST","Do MMM YYYY hh:mm:ss #{EST}");
Output:
28th Feb 2013 19:00:00 EST
Anda dapat menjelajahi berbagai fungsi dalam dokumen.
sumber
ada modul npm bernama 'timezones.json' yang dapat Anda gunakan untuk ini; pada dasarnya terdiri dari file json dengan objek yang berisi informasi tentang penghematan siang hari dan offset, ....
untuk asia / jakarta akan dapat mengembalikan objek ini:
Anda dapat menemukannya di sini:
https://github.com/dmfilipenko/timezones.json
https://www.npmjs.com/package/timezones.json
semoga bermanfaat
sumber
Orang yang akrab dengan
java.time
paket java 8 , ataujoda-time
mungkin akan menyukai anak baru di blok: perpustakaan js-joda .Install
Contoh
Di alam java yang sebenarnya, itu cukup verbose lol. Tapi, menjadi perpustakaan java porting, terutama mengingat mereka porting kasus uji 1800, mereka juga mungkin bekerja dengan sangat akurat.
Manipulasi chrono sulit. Itu sebabnya banyak perpustakaan lainnya bermasalah dalam kasus tepi. Moment.js tampaknya mendapatkan zona waktu yang tepat, tetapi ls lainnya yang saya lihat, termasuk
timezone-js
, tampaknya tidak dapat dipercaya.sumber
Saya baru-baru ini melakukan ini dalam naskah:
Saya Menggunakan format "en-UK" karena formatnya sederhana. Bisa jadi "en-US" atau apa pun yang berhasil.
Jika argumen pertama adalah zona waktu lokal Anda dan yang kedua adalah zona waktu target Anda, ia mengembalikan objek Tanggal dengan offset yang benar.
sumber
Saya mengalami masalah menggunakan Moment Timezone . Saya menambahkan jawaban ini hanya jika ada orang lain yang menghadapi masalah yang sama. Jadi saya punya string tanggal yang
2018-06-14 13:51:00
berasal dariAPI
. Saya tahu ini disimpan diUTC
tetapi string tidak berbicara sendiri.Saya beri tahu zona waktu saat ini, dari zona mana tanggal ini berasal dengan melakukan:
Sekarang saya ingin mengubahnya menjadi zona waktu tertentu dengan melakukan:
sumber
Cukup atur zona waktu negara keinginan Anda dan Anda dapat dengan mudah menampilkannya dalam pembaruan html menggunakan fungsi SetInteval () setelah setiap satu menit. function formatAMPM () mengelola format 12 jam dan tampilan waktu AM / PM.
sumber
Saya tidak tahu metode mudah untuk mengonversi objek tanggal ke zona waktu mana pun, tetapi jika Anda ingin mengubahnya menjadi zona waktu lokal, Anda bisa mengonversinya dengan
Date.prototype.getTime()
jumlah milidetik yang sesuai, dan kembali lagi.Misalnya,
date.getHours()
sekarang akan kembali,15
bukan13
jika Anda, seperti saya, di Austria (dan ini musim panas).Saya telah membaca bahwa berbagai fungsi datetime dapat menunjukkan perilaku non-standar di beberapa browser, jadi uji ini terlebih dahulu. Saya dapat mengonfirmasi bahwa itu berfungsi di Chrome.
sumber
Offset Zona Waktu untuk zona waktu Anda saat ini
Untuk zona waktu GMT + 10 (Australia) saya mengembalikan -36000
sumber
pengubah jam manual cepat dan kotor dan kembali:
sumber