Objek tanggal saya di JavaScript selalu diwakili oleh UTC +2 karena di mana saya berada. Makanya begini
Mon Sep 28 10:00:00 UTC+0200 2009
Masalahnya adalah melakukan JSON.stringify
konversi tanggal di atas menjadi
2009-09-28T08:00:00Z (notice 2 hours missing i.e. 8 instead of 10)
Yang saya butuhkan adalah tanggal dan waktu untuk dihormati tetapi sebenarnya tidak, maka seharusnya begitu
2009-09-28T10:00:00Z (this is how it should be)
Pada dasarnya saya menggunakan ini:
var jsonData = JSON.stringify(jsonObject);
Saya mencoba melewatkan parameter pengganti (parameter kedua pada stringify) tetapi masalahnya adalah nilainya sudah diproses.
Saya juga mencoba menggunakan toString()
dan toUTCString()
pada objek tanggal, tetapi ini juga tidak memberikan apa yang saya inginkan ..
Ada yang bisa bantu saya?
javascript
json
datetime
utc
tandai smith
sumber
sumber
2009-09-28T10:00:00Z
tidak mewakili saat yang sama dalam waktu sebagaiMon Sep 28 10:00:00 UTC+0200 2009
. TanggalZ
dalam ISO 8601 berarti UTC, dan jam 10 di UTC adalah momen waktu yang berbeda dengan jam 10 di +0200. Menginginkan tanggal untuk diserialkan dengan zona waktu yang tepat adalah satu hal, tetapi Anda meminta kami membantu Anda membuat serialisasi ke representasi yang benar-benar salah secara obyektif .Jawaban:
Baru-baru ini saya mengalami masalah yang sama. Dan itu diselesaikan menggunakan kode berikut:
sumber
JSON menggunakan
Date.prototype.toISOString
fungsi yang tidak mewakili waktu lokal - ini mewakili waktu dalam UTC yang tidak diubah - jika Anda melihat keluaran tanggal Anda, Anda dapat melihat bahwa Anda berada di UTC + 2 jam, itulah sebabnya string JSON berubah dua jam, tetapi jika ini memungkinkan waktu yang sama direpresentasikan dengan benar di beberapa zona waktu.sumber
Sekadar catatan, ingat bahwa "Z" terakhir di "2009-09-28T08: 00: 00Z" berarti waktu memang dalam UTC.
Lihat http://en.wikipedia.org/wiki/ISO_8601 untuk detailnya.
sumber
Ini jawaban lain (dan secara pribadi menurut saya itu lebih tepat)
sumber
date.toJSON () mencetak UTC-Date menjadi String yang diformat (Jadi menambahkan offset dengannya saat mengubahnya menjadi format JSON).
sumber
date.getTime()
mengembalikan waktu dalam milidetik, jadi kita harus mengonversi operan kedua menjadi milidetik juga. Karenadate.getTimezoneOffset()
pengembalian offset dalam beberapa menit, kami mengalikannya 60000, karena 1 menit = 60000milidetik. Jadi dengan mengurangi offset dari waktu saat ini kita mendapatkan waktu dalam UTC.Anda dapat menggunakan moment.js untuk memformat dengan waktu lokal:
sumber
Saya agak terlambat tetapi Anda selalu dapat menimpa fungsi toJson jika Tanggal menggunakan Prototipe seperti ini:
Dalam kasus saya, Util.getDateTimeString (this) mengembalikan string seperti ini: "2017-01-19T00: 00: 00Z"
sumber
Solusi out-of-the-box untuk memaksa
JSON.stringify
mengabaikan zona waktu:Menggunakan pustaka momen + zona waktu:
sumber
Biasanya Anda ingin tanggal disajikan kepada setiap pengguna dalam waktu lokalnya sendiri-
itulah mengapa kami menggunakan GMT (UTC).
Gunakan Date.parse (jsondatestring) untuk mendapatkan string waktu lokal,
kecuali Anda ingin waktu lokal Anda ditampilkan kepada setiap pengunjung.
Jika demikian, gunakan metode Anatoly.
sumber
Atasi masalah ini dengan menggunakan
moment.js
pustaka (versi non-zona waktu).Saya menggunakan
flatpickr.min.js
perpustakaan. Waktu dari objek JSON yang dibuat cocok dengan waktu lokal yang disediakan, tetapi pemilih tanggal.sumber
Saya mengalami ini sedikit bekerja dengan barang-barang warisan di mana mereka hanya bekerja di pantai timur AS dan tidak menyimpan tanggal di UTC, itu semua EST. Saya harus memfilter tanggal berdasarkan input pengguna di browser jadi harus meneruskan tanggal dalam waktu lokal dalam format JSON.
Hanya untuk menguraikan solusi ini yang sudah diposting - inilah yang saya gunakan:
Jadi pemahaman saya adalah ini akan melanjutkan dan mengurangi waktu (dalam milidetik (karenanya 60000) dari tanggal mulai berdasarkan offset zona waktu (menit kembali) - untuk mengantisipasi penambahan waktu toJSON () akan ditambahkan.
sumber
Ini adalah sesuatu yang sangat rapi dan sederhana (setidaknya saya percaya begitu :)) dan tidak memerlukan manipulasi tanggal untuk dikloning atau membebani fungsi asli browser apa pun seperti toJSON (referensi: Cara JSON merangkai javascript Tanggal dan mempertahankan zona waktu , sopan Shawson)
Teruskan fungsi pengganti ke JSON.stringify yang merangkai barang sesuka hati !!! Dengan cara ini Anda tidak perlu melakukan perbedaan jam dan menit atau manipulasi lainnya.
Saya telah memasukkan console.logs untuk melihat hasil antara sehingga jelas apa yang terjadi dan bagaimana rekursi bekerja. Itu mengungkapkan sesuatu yang perlu diperhatikan: nilai param to replacer sudah dikonversi ke format tanggal ISO :). Gunakan [kunci] ini untuk bekerja dengan data asli.
sumber
JavaScript biasanya mengubah zona waktu lokal menjadi UTC.
sumber
Semua intinya adalah apakah backend server Anda adalah zona waktu-agnostik atau tidak. Jika tidak, maka Anda perlu berasumsi bahwa zona waktu server sama dengan klien, atau mentransfer informasi tentang zona waktu klien dan memasukkannya juga ke dalam penghitungan.
contoh berbasis backend PostgreSQL:
Yang terakhir mungkin adalah apa yang ingin Anda gunakan dalam database, jika Anda tidak ingin menerapkan logika zona waktu dengan benar.
sumber
Sebagai gantinya
toJSON
, Anda dapat menggunakan fungsi format yang selalu memberikan tanggal dan waktu + yang benarGMT
sumber
Saya mencoba ini di sudut 8:
buat Model:
di komponen Anda
kirim Tanggal ke API Anda untuk disimpan
Saat memuat data Anda dari API, Anda akan membuat ini:
model.YourDate = new Date(model.YourDate+"Z");
Anda akan mendapatkan tanggal Anda dengan benar dengan zona waktu Anda.
sumber