Saya memiliki halaman web dengan tiga dropdown untuk hari, bulan, dan tahun. Jika saya menggunakan Date
konstruktor JavaScript yang mengambil angka, maka saya mendapatkan Date
objek untuk zona waktu saya saat ini:
new Date(xiYear, xiMonth, xiDate)
Berikan tanggal yang benar, tetapi menurutnya tanggal tersebut GMT + 01: 00 karena waktu musim panas.
Masalahnya di sini adalah bahwa saya kemudian meneruskan ini Date
ke metode Ajax dan ketika tanggal deserialised di server itu telah dikonversi ke GMT dan kehilangan satu jam yang bergerak kembali satu hari. Sekarang saya bisa melewatkan hari, bulan, dan tahun secara individual ke dalam metode Ajax, tetapi tampaknya harus ada cara yang lebih baik.
Jawaban yang diterima mengarahkan saya ke arah yang benar, namun hanya setUTCHours()
dengan menggunakan itu sendiri berubah:
Apr 5th 00:00 GMT+01:00
untuk
Apr 4th 23:00 GMT+01:00
Saya kemudian juga harus mengatur tanggal UTC, bulan dan tahun untuk berakhir dengan
Apr 5th 01:00 GMT+01:00
itulah yang saya inginkan.
sumber
Jawaban:
menggunakannya
.setUTCHours()
adalah mungkin untuk benar-benar mengatur tanggal dalam waktu UTC, yang memungkinkan Anda untuk menggunakan waktu UTC di seluruh sistem.Anda tidak dapat mengaturnya menggunakan UTC di konstruktor, kecuali Anda menentukan string tanggal.Menggunakan
new Date(Date.UTC(year, month, day, hour, minute, second))
Anda dapat membuat objek-Tanggal dari waktu UTC tertentu.sumber
Jawaban ini dirancang khusus untuk pertanyaan awal, dan tidak akan memberikan jawaban yang Anda harapkan. Secara khusus, beberapa orang ingin mengurangi offset zona waktu alih-alih menambahkannya. Ingat juga bahwa inti dari solusi ini adalah untuk meretas objek tanggal javascript untuk deserialisasi tertentu, tidak untuk menjadi benar dalam semua kasus.
sumber
*60*1000
lebih jelas dalam hal ini; dengan kata lain, cukup jelas mengapa itu ada.Saya yakin Anda memerlukan fungsi createDateAsUTC (bandingkan dengan convertDateToUTC )
sumber
date
menjadi zona waktu UTC, tetapi yang kedua tampaknya tidak berguna? (mengembalikan tanggal yang sama dengandate
)Date
Objek JavaScript akan selalu mencerminkan zaman unix berbasis UTC, dan zona waktu lokal . Gejala ini terlihat saat Anda memanggiltoString
objek tanggal yang dihasilkan dan masih melihat zona waktu setempat, meskipun Anda mengharapkannya berada di UTC.Date
objek JavaScript . Cara lain untuk melihatnya di sini adalah yangDate.UTC
mengharapkan nilai berbasis UTC, dan Anda memberinya nilai waktu setempat, dan sebaliknya denganDate
konstruktor.Cukup Tetapkan Zona Waktu dan Dapatkan Kembali Menurut
sumber
Saya tidak percaya ini mungkin - tidak ada kemampuan untuk mengatur zona waktu pada objek Tanggal setelah dibuat.
Dan dengan cara ini masuk akal - secara konseptual (jika mungkin tidak dalam implementasi); per http://en.wikipedia.org/wiki/Unix_timestamp (penekanan milik saya):
Setelah Anda membuat satu, itu akan mewakili titik tertentu dalam waktu "nyata". Zona waktu hanya relevan ketika Anda ingin mengubah titik waktu abstrak itu menjadi string yang dapat dibaca manusia.
Dengan demikian masuk akal Anda hanya akan dapat mengubah waktu aktual yang diwakili oleh Tanggal dalam konstruktor. Sayangnya tampaknya tidak ada cara untuk lulus dalam zona waktu eksplisit - dan konstruktor yang Anda panggil (bisa dibilang benar) menerjemahkan variabel waktu "lokal" Anda ke dalam GMT ketika menyimpannya secara kanonik - jadi tidak ada cara untuk menggunakan
int, int, int
konstruktor untuk Waktu GMT.Di sisi positifnya, sepele untuk hanya menggunakan konstruktor yang mengambil String sebagai gantinya. Anda bahkan tidak perlu mengubah bulan angka menjadi String (setidaknya di Firefox), jadi saya berharap implementasi yang naif akan berhasil. Namun, setelah mencobanya berfungsi dengan sukses di Firefox, Chrome, dan Opera tetapi gagal di Konqueror ("Invalid Date"), Safari ("Invalid Date") dan IE ("NaN"). Saya kira Anda hanya memiliki array pencarian untuk mengkonversi bulan menjadi sebuah string, seperti:
sumber
Saya tahu ini sudah lama tetapi jika itu membantu Anda bisa menggunakan zona waktu momen dan momen. Jika Anda belum melihat mereka melihatnya.
http://momentjs.com/timezone/
http://momentjs.com/
dua perpustakaan manipulasi waktu yang sangat berguna.
sumber
Jika Anda ingin berurusan dengan masalah yang sedikit berbeda, tetapi terkait, membuat objek Tanggal Javascript dari tahun, bulan, hari, ..., termasuk zona waktu - yaitu, jika Anda ingin mengurai string menjadi Tanggal - maka Anda rupanya harus melakukan tarian yang sangat rumit:
Artinya, Anda membuat 'waktu UTC' menggunakan tanggal tanpa zona waktu (jadi Anda tahu di mana lokasi itu, yaitu 'lokal' UTC, dan tidak default ke yang lokal), lalu menerapkan secara manual zona waktu yang ditunjukkan.
Bukankah lebih baik jika seseorang benar-benar berpikir tentang objek tanggal Javascript selama lebih dari, oooh, lima menit ....
sumber
untuk semua lokasi mengimbangi Daftar offset waktu Wiki UTC
sumber
getTimeZoneOffset minus untuk UTC + z.
sumber
Ini dapat membantu seseorang, menempatkan UTC di akhir apa yang Anda berikan kepada konstruktor baru
Setidaknya di chrome bisa Anda katakan
var date = new Date("2014-01-01 11:00:00 UTC")
sumber
+0000
(perhatikan bahwa ruang antara 00 dan UTC perlu dihapus) dan ini akan berfungsi pada Firefox dan Chrome. Tidak yakin untuk Safari. (Referensi: stackoverflow.com/a/17545854/1273587 )Solusi satu baris
Alih-alih 1422524805305, gunakan cap waktu dalam milidetik Alih-alih 330, gunakan offset zona waktu Anda dalam hitungan menit. GMT (mis. India +5: 30 adalah 5 * 60 + 30 = 330 menit)
sumber
sumber
Cara termudah yang saya temukan untuk mendapatkan tanggal yang benar adalah menggunakan datejs.
http://www.datejs.com/
Saya mendapatkan tanggal saya melalui Ajax dalam format ini sebagai string: '2016-01-12T00: 00: 00'
Konsol akan membaca:
Senin 11 Jan 2016 19:00:00 GMT-0500 (Waktu Standar Timur)
Sel 12 Jan 2016 00:00:00 GMT-0500 (Waktu Standar Timur)
https://jsfiddle.net/vp1ena7b/3/
The 'addMinutes' berasal dari datejs, Anda mungkin bisa melakukan ini di js murni sendiri, tetapi saya sudah punya datejs di proyek saya jadi saya menemukan cara untuk menggunakannya untuk mendapatkan tanggal yang benar.
Saya pikir ini mungkin membantu seseorang ...
sumber
jarak tempuh apa pun di
sumber
Kode ini akan mengembalikan objek Tanggal Anda yang diformat dengan zona waktu browser .
Edit:
Untuk menghindari mencemari API Tanggal, fungsi di atas dapat diubah menjadi fungsi utilitas. Fungsi mengambil objek Date, dan mengembalikan objek Date bermutasi.
sumber
Solusi terbaik yang saya lihat dari ini berasal dari
http://www.codingforums.com/archive/index.php/t-19663.html
Fungsi Waktu Cetak
Contoh Kode Lengkap
sumber
jika Anda ingin memeriksa perbedaan dalam waktu antara dua tanggal, Anda dapat dengan mudah memeriksa apakah zona waktu kedua lebih kecil atau lebih besar dari zona waktu pertama yang Anda inginkan dan kurangi atau tambahkan waktu.
sumber
GMT -03: 00 Contoh
Atau bahkan
sumber
Ini berhasil untuk saya. Tidak yakin apakah itu ide yang bagus.
sumber
Saya menggunakan paket timezone-js.
sumber
Ini adalah solusi TERBAIK
Menggunakan:
Kode:
Versi kopi:
sumber