Saya ingin server selalu menyajikan tanggal dalam UTC dalam HTML, dan meminta JavaScript di situs klien untuk mengubahnya menjadi zona waktu lokal pengguna.
Bonus jika saya bisa menampilkan dalam format tanggal lokal pengguna.
Saya ingin server selalu menyajikan tanggal dalam UTC dalam HTML, dan meminta JavaScript di situs klien untuk mengubahnya menjadi zona waktu lokal pengguna.
Bonus jika saya bisa menampilkan dalam format tanggal lokal pengguna.
Tampaknya cara yang paling mudah untuk memulai dengan tanggal UTC adalah dengan membuat Date
objek baru dan menggunakansetUTC…
metode untuk mengaturnya ke tanggal / waktu yang Anda inginkan.
Lalu bermacam-macam toLocale…String
metode akan memberikan keluaran lokal.
// This would come from the server.
// Also, this whole block could probably be made into an mktime function.
// All very bare here for quick grasping.
d = new Date();
d.setUTCFullYear(2004);
d.setUTCMonth(1);
d.setUTCDate(29);
d.setUTCHours(2);
d.setUTCMinutes(45);
d.setUTCSeconds(26);
console.log(d); // -> Sat Feb 28 2004 23:45:26 GMT-0300 (BRT)
console.log(d.toLocaleString()); // -> Sat Feb 28 23:45:26 2004
console.log(d.toLocaleDateString()); // -> 02/28/2004
console.log(d.toLocaleTimeString()); // -> 23:45:26
toLocateDateString()
kembalikan sesuatu yang terlihat seperti 'Minggu, 12 Januari 2014' ..var d = new Date(Date.UTC(2004,1,29,2,45,26));
toLocaleString()
fungsi.Untuk proyek baru, cukup gunakan moment.js
Pertanyaan ini cukup lama, jadi moment.js tidak ada pada waktu itu, tetapi untuk proyek-proyek baru, itu sangat menyederhanakan tugas seperti ini.
Sebaiknya parsing string tanggal Anda dari UTC sebagai berikut (buat string yang kompatibel dengan ISO-8601 di server untuk mendapatkan hasil yang konsisten di semua browser):
Sekarang cukup gunakan
m
dalam aplikasi Anda, moment.js default ke zona waktu lokal untuk operasi tampilan. Ada banyak cara untuk memformat nilai tanggal dan waktu atau mengekstrak bagiannya.Anda bahkan dapat memformat objek momen di lokal pengguna seperti ini:
Untuk mengubah objek moment.js menjadi zona waktu yang berbeda (yaitu bukan yang lokal atau UTC), Anda memerlukan ekstensi zona waktu moment.js . Halaman itu juga memiliki beberapa contoh, cukup mudah digunakan.
sumber
For old projects, just use jQuery
Anda dapat menggunakan
new Date().getTimezoneOffset()/60
zona waktu. Ada jugatoLocaleString()
metode untuk menampilkan tanggal menggunakan lokal pengguna.Berikut daftar lengkapnya : Bekerja dengan Tanggal
sumber
toLocaleString
?Setelah objek tanggal Anda dibuat, inilah cuplikan untuk konversi:
Fungsi ini mengambil objek Tanggal berformat UTC dan string format.
Anda akan membutuhkan
Date.strftime
prototipe.sumber
getTimezoneOffset()/60
dapat mengembalikan sebagian kecil (mis. India offset +05: 30 akan mengembalikan 5,5). Desimal terpotong. Jika tidak, pengaturan jam memperbarui nilai lain (atur jam ke 48 dan lihat apa yang terjadi).Di JS tidak ada cara sederhana dan lintas platform untuk memformat waktu tanggal lokal, di luar konversi setiap properti seperti yang disebutkan di atas.
Ini adalah hack cepat yang saya gunakan untuk mendapatkan YYYY-MM-DD lokal. Perhatikan bahwa ini adalah peretasan, karena tanggal akhir tidak akan memiliki zona waktu yang benar lagi (jadi Anda harus mengabaikan zona waktu). Jika saya membutuhkan hal lain lagi, saya menggunakan moment.js.
The d.getTimezoneOffset () mengembalikan offset zona waktu dalam beberapa menit, dan d.getTime () dalam ms, maka x 60.000.
sumber
Inilah yang saya gunakan dalam proyek sebelumnya:
sumber
getTimezoneOffset()/60
akan sering mengembalikan nilai desimal. Ini terutama berlaku untuk tanggal sebelum 1900, di mana banyak tempat memiliki offset dalam hitungan menit dan detik. Selain itu, Tanggal javascript sekarang diperlukan untuk mendukung offset historis. Misalnya pada tahun 1890 offset di Moskow adalah +2: 30: 17. Lihat Peramban, zona waktu, Kesalahan Chrome 67 .The
.getTimezoneOffset()
Metode melaporkan zona waktu offset dalam menit, penghitungan "ke arah barat" dari zona waktu GMT / UTC, mengakibatkan nilai offset yang negatif dengan apa yang umumnya terbiasa. (Contoh, waktu New York akan dilaporkan +240 menit atau +4 jam)Untuk mendapatkan offset zona waktu normal dalam jam, Anda perlu menggunakan:
Detail penting:
Perhatikan bahwa penghematan waktu siang hari diperhitungkan dalam hasil - jadi apa yang diberikan metode ini adalah offset waktu sebenarnya - bukan offset zona waktu geografis yang sebenarnya .
sumber
Dengan tanggal dari kode PHP saya menggunakan sesuatu seperti ini ..
Kita bisa menyebutnya seperti ini
sumber
Saya mencampur jawaban sejauh ini dan menambahkannya, karena saya harus membaca semuanya dan menyelidiki tambahan untuk sementara waktu untuk menampilkan string waktu tanggal dari db dalam format zona waktu lokal pengguna.
String datetime berasal dari python / django db dalam format: 2016-12-05T15: 12: 24.215Z
Deteksi bahasa browser yang andal dalam JavaScript tampaknya tidak berfungsi di semua browser (lihat JavaScript untuk mendeteksi preferensi bahasa browser ), jadi saya mendapatkan bahasa browser dari server.
Python / Django: kirim bahasa browser permintaan sebagai parameter konteks:
HTML: tulis di input tersembunyi:
JavaScript: dapatkan nilai input tersembunyi mis. En-GB, en-US; q = 0.8, en; q = 0.6 / dan kemudian ambil bahasa pertama dalam daftar hanya melalui ganti dan ekspresi reguler
JavaScript: konversikan ke datetime dan formatlah:
Lihat: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString
Hasilnya adalah (bahasa browser adalah en-gb): 05/12/2016, 14:58
sumber
sumber
options
bagian untuk kasus saya)Solusi terbaik yang pernah saya temui adalah membuat tag [time display = "llll" datetime = "UTC TIME" /], dan menggunakan javascript (jquery) untuk mem-parsing dan menampilkannya relatif terhadap waktu pengguna.
http://momentjs.com/ Moment.js
akan menampilkan waktu dengan baik.
sumber
Anda dapat menggunakan yang berikut ini, yang melaporkan zona waktu offset dari GMT dalam beberapa menit:
Catatan: - fungsi ini mengembalikan angka negatif.
sumber
getTimeZoneOffset () dan toLocaleString bagus untuk pekerjaan tanggal dasar, tetapi jika Anda membutuhkan dukungan zona waktu nyata, lihat TimeZone.js mde .
Ada beberapa opsi lagi yang dibahas dalam jawaban untuk pertanyaan ini
sumber
Untuk mengonversi tanggal ke tanggal lokal, gunakan metode toLocaleDateString ().
Untuk mengonversi waktu ke waktu lokal, gunakan metode toLocaleTimeString ().
sumber
Tidak tahu bagaimana melakukan lokal, tetapi javascript adalah teknologi sisi klien.
akan memiliki waktu dan tanggal klien di dalamnya (seperti yang dilaporkan oleh browser mereka, dan dengan ekstensi komputer tempat mereka duduk). Seharusnya sepele untuk memasukkan waktu server dalam respons dan melakukan beberapa matematika sederhana untuk menebak-mengimbangi waktu.
sumber