Saya ingin menguraikan tanggal tanpa zona waktu dalam JavaScript. Saya telah mencoba:
new Date(Date.parse("2005-07-08T00:00:00+0000"));
Pengembalian Jum 08 Jul 2005 02:00:00 GMT + 0200 (Waktu Siang Eropa Tengah)
new Date(Date.parse("2005-07-08 00:00:00 GMT+0000"));
Menghasilkan hasil yang sama
new Date(Date.parse("2005-07-08 00:00:00 GMT-0000"));
Menghasilkan hasil yang sama
Saya ingin menguraikan waktu:
Tanpa zona waktu.
Tanpa memanggil konstruktor Date.UTC atau Tanggal baru (tahun, bulan, hari).
Sederhananya lewat string ke konstruktor Tanggal (tanpa pendekatan prototipe).
Saya harus
Date
objek produk , tidakString
.
Date.parse
btw dan langsung meneruskan string keDate
konstruktor.Date
objek untuk mendapatkan objek yang benar untuk membandingkan tanggal di MongoDB:new Date(dateStart.getFullYear(), dateStart.getMonth(), dateStart.getDate())
Jawaban:
Tanggal diuraikan dengan benar, hanya toString yang mengubahnya menjadi zona waktu lokal Anda:
Objek Date Javascript adalah cap waktu - mereka hanya mengandung sejumlah milidetik sejak zaman. Tidak ada info zona waktu di objek Tanggal. Tanggal kalender mana (hari, menit, detik) yang diwakili oleh stempel waktu ini adalah masalah interpretasi (salah satu
to...String
metode).Contoh di atas menunjukkan bahwa tanggal sedang diurai dengan benar - yaitu, sebenarnya berisi jumlah milidetik yang sesuai dengan "2005-07-08T11: 22: 33" dalam GMT.
sumber
new Date(Date.parse("2005-07-08T11:22:33+0000"))
, dan tanggal disalin melalui konstruktor:new Date(dateStart.getFullYear(), dateStart.getMonth(), dateStart.getDate())
. Kedua solusi, hasil berbeda, kedua benar! Balasan Anda bermanfaat, hanya disebutkan di hunlock.com/blogs/Javascript_Dates-The_Complete_Reference . Naik.Saya memiliki masalah yang sama. Saya mendapatkan tanggal sebagai String, misalnya: '2016-08-25T00: 00: 00', tetapi saya perlu memiliki objek Date dengan waktu yang benar. Untuk mengonversi String menjadi objek, saya menggunakan getTimezoneOffset:
getTimezoneOffset()
akan mengembalikan nilai negatif atau positif eter. Ini harus dikurangkan untuk bekerja di setiap lokasi di dunia.sumber
var userTimezoneOffset = date.getTimezoneOffset()*60000;
getTimezoneOffset()
mengembalikan jumlah menit ke arah berlawanan yang Anda pikirkan - zona waktu saya adalah UTC-4 sekarang tetapigetTimezoneOffset()
mengembalikan 240 yang positif. Oleh karena ituuserTimezoneOffset
harus dikurangidate.getTime()
, bukan ditambahkan.new Date('2016-08-25T00:00:00Z')
saya pikir intinya adalah untuk memanipulasinew Date('2016-08-25T00:00:00Z')
sehingga waktu lokal ditampilkan dengan waktu 0:00 tetapi kode ini tidak terjawabZ
Saya mengalami masalah yang sama dan kemudian teringat sesuatu yang aneh tentang proyek warisan yang sedang saya kerjakan dan bagaimana mereka menangani masalah ini. Saya tidak memahaminya pada saat itu dan tidak terlalu peduli sampai saya mengalami masalah sendiri
Untuk alasan apa pun yang melewatkan tanggal sebagai '01 -02-2014 'menetapkan zona waktu ke nol dan mengabaikan zona waktu pengguna. Ini mungkin kebetulan di kelas Date tetapi ada beberapa waktu lalu dan ada hari ini. Dan tampaknya berfungsi lintas-browser. Cobalah sendiri.
Kode ini diimplementasikan dalam proyek global di mana zona waktu sangat berarti tetapi orang yang melihat tanggal tersebut tidak peduli kapan tepatnya itu diperkenalkan.
sumber
2014/5/31
dan2014/05/31
sebagai Sabtu, 31 Mei 2014 00:00:00 GMT-0600 (Waktu Siang Gunung) `(MDT menjadi zona waktu saya saat ini). Dengan tanda hubung ... semua browser mengartikan2014-05-31
sebagai Jum 30 Mei 2014 18:00:00 GMT-0600 (Waktu Siang Gunung). Anehnya, dengan2014-5-31
, Chrome kembali pada hari Sabtu, Firefox kembali pada hari Jumat, dan IE11 mengatakan tanggal tersebut tidak valid. Sepertinyadate.replace('-','/')
bisa melakukan trik.The
Date
obyek itu sendiri akan berisi zona waktu pula, dan hasil yang dikembalikan adalah efek dari mengubahnya menjadi string dengan cara default. Yaitu Anda tidak dapat membuat objek tanggal tanpa zona waktu. Tapi yang bisa Anda lakukan adalah meniru perilakuDate
objek dengan membuat objek Anda sendiri. Namun, ini lebih baik diserahkan ke perpustakaan seperti moment.js .sumber
solusi sederhana
sumber
Tanggal dalam javascript hanya menjaganya agar tetap sederhana. sehingga data tanggal-waktu disimpan dalam UTC unix epoch (milidetik atau ms).
Jika Anda ingin memiliki waktu "tetap" yang tidak berubah di zona waktu apa pun di bumi, Anda dapat menyesuaikan waktu di UTC agar sesuai dengan zona waktu lokal Anda saat ini dan menyimpannya. Dan ketika mengambilnya kembali, di zona waktu lokal mana pun Anda berada, itu akan menunjukkan waktu UTC yang disesuaikan berdasarkan orang yang menyimpannya dan menambahkan offset zona waktu lokal untuk mendapatkan waktu "tetap".
Untuk menyimpan tanggal (dalam ms)
Untuk mengambil / menampilkan tanggal (dalam ms)
Maka kamu bisa:
sumber
Anda dapat menggunakan kode ini
sumber
Karena ini benar-benar masalah pemformatan saat menampilkan tanggal (mis. Tampilan dalam waktu lokal), saya ingin menggunakan objek Intl.ateTimeFormat (ish) yang baru untuk melakukan pemformatan karena lebih eksplisit dan memberikan lebih banyak opsi keluaran:
Seperti yang ditunjukkan, dengan mengatur zona waktu ke 'UTC' maka tidak akan melakukan konversi lokal. Sebagai bonus, ini juga memungkinkan Anda untuk membuat lebih banyak output yang dipoles. Anda dapat membaca lebih lanjut tentang objek Intl.DateTimeFormat dari Mozilla - Intl.DateTimeFormat .
Edit:
Fungsionalitas yang sama dapat dicapai tanpa membuat
Intl.DateTimeFormat
objek baru . Cukup berikan opsi lokal dan tanggal langsung ketoLocaleDateString()
fungsi.sumber
Hanya catatan umum. cara untuk membuatnya fleksibel.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date
Kita dapat menggunakan getMinutes (), tetapi hanya mengembalikan satu nomor selama 9 menit pertama.
sumber
(new Date().toString()).replace(/ \w+-\d+ \(.*\)$/,"")
Ini akan menghasilkan: Sel 10 Jul 2018 19:07:11
(new Date("2005-07-08T11:22:33+0000").toString()).replace(/ \w+-\d+ \(.*\)$/,"")
Ini akan menghasilkan: Jumat 08 Juli 2005 04:22:33
Catatan: Waktu yang dikembalikan akan tergantung pada zona waktu lokal Anda
sumber
Ini adalah solusi yang saya buat untuk masalah ini yang bekerja untuk saya.
perpustakaan digunakan: momentjs dengan kelas Tanggal javascript polos.
Langkah 1. Konversi String date to object moment (PS: moment mempertahankan tanggal dan waktu asli selama
toDate()
metode tidak dipanggil):const dateMoment = moment("2005-07-08T11:22:33+0000");
Langkah 2. Ekstrak
hours
danminutes
nilai dari objek momen yang dibuat sebelumnya:Langkah 3. Konversi momen ke Tanggal (PS: ini akan mengubah tanggal asli berdasarkan zona waktu browser / mesin Anda, tetapi jangan khawatir dan baca langkah 4.):
Langkah 4. Secara manual mengatur jam dan menit diekstraksi dalam Langkah 2.
Langkah 5.
dateObj
sekarang akan menampilkan Tanggal asli tanpa perbedaan zona waktu. Bahkan perubahan waktu Siang hari tidak akan berpengaruh pada objek tanggal karena kami secara manual mengatur jam dan menit asli.Semoga ini membantu.
sumber
Ada beberapa masalah inheren dengan penguraian tanggal yang sayangnya tidak ditangani dengan baik secara default.
Tanggal yang dapat dibaca manusia memiliki zona waktu tersirat di dalamnya
Ada banyak format tanggal yang banyak digunakan di seluruh web yang ambigu.
Untuk menyelesaikan masalah ini dengan mudah dan bersih, dibutuhkan fungsi seperti ini:
Saya telah mencari ini, tetapi tidak menemukan yang seperti itu!
Jadi saya membuat: https://github.com/zsoltszabo/timestamp-grabber
Nikmati!
sumber