Sasaran: Temukan local time
dan UTC time offset
kemudian buat URL dalam format berikut.
Contoh URL: / Actions / Sleep? Durasi = 2002-10-10T12: 00: 00−05: 00
Formatnya didasarkan pada rekomendasi W3C: http://www.w3.org/TR/xmlschema11-2/#dateTime
Dokumentasinya mengatakan:
Misalnya, 2002-10-10T12: 00: 00−05: 00 (siang pada 10 Oktober 2002, Waktu Musim Panas Tengah serta Waktu Standar Timur di AS) sama dengan 2002-10-10T17: 00: 00Z, lima jam lebih lambat dari 2002-10-10T12: 00: 00Z.
Jadi berdasarkan pemahaman saya, saya perlu menemukan waktu lokal saya dengan Date () baru kemudian menggunakan fungsi getTimezoneOffset () untuk menghitung perbedaannya lalu melampirkannya ke akhir string.
1. Dapatkan waktu lokal dengan format
var local = new Date().format("yyyy-MM-ddThh:mm:ss"); //today (local time)
keluaran
2013-07-02T09:00:00
2. Atur waktu UTC per jam
var offset = local.getTimezoneOffset() / 60;
keluaran
7
3. Bangun URL (hanya bagian waktu)
var duration = local + "-" + offset + ":00";
keluaran:
2013-07-02T09:00:00-7:00
Output di atas berarti waktu lokal saya adalah 2013/07/02 9 pagi dan perbedaan dari UTC adalah 7 jam (UTC 7 jam lebih awal dari waktu lokal)
Sejauh ini tampaknya berhasil tetapi bagaimana jika getTimezoneOffset () mengembalikan nilai negatif seperti -120?
Saya bertanya-tanya bagaimana format akan terlihat dalam kasus seperti itu karena saya tidak dapat mengetahui dari dokumen W3C. Terima kasih sebelumnya.
getTimezoneOffset()
mengembalikan tanda berlawanan dari format yang dibutuhkan oleh spesifikasi yang Anda referensikan.Format ini juga dikenal sebagai ISO8601 , atau lebih tepatnya RFC3339 .
Dalam format ini, UTC diwakili dengan
Z
sementara semua format lainnya diwakili oleh offset dari UTC. Artinya sama dengan JavaScript, tetapi urutan pengurangannya dibalik, sehingga hasilnya membawa tanda yang berlawanan.Selain itu, tidak ada metode pada
Date
objek asli yang dipanggilformat
, jadi fungsi Anda di # 1 akan gagal kecuali Anda menggunakan pustaka untuk melakukannya. Lihat dokumentasi ini .Jika Anda mencari perpustakaan yang dapat bekerja dengan format ini secara langsung, saya sarankan untuk mencoba moment.js . Faktanya, ini adalah format default, jadi Anda cukup melakukan ini:
Ini adalah solusi lintas-browser yang teruji dengan baik, dan memiliki banyak fitur berguna lainnya.
sumber
Saya pikir perlu dipertimbangkan bahwa Anda bisa mendapatkan info yang diminta hanya dengan satu panggilan API ke perpustakaan standar ...
Anda harus melakukan pertukaran teks jika Anda ingin menambahkan pembatas 'T', menghapus 'GMT-', atau menambahkan ': 00' di bagian akhir.
Tetapi kemudian Anda dapat dengan mudah bermain dengan opsi lain jika Anda mau, misalnya. gunakan waktu 12 jam atau hilangkan detik, dll.
Perhatikan bahwa saya menggunakan Swedia sebagai lokal karena merupakan salah satu negara yang menggunakan format ISO 8601. Saya rasa sebagian besar negara ISO menggunakan format 'GMT-4' ini untuk offset zona waktu selain Kanada yang menggunakan singkatan zona waktu misalnya. "EDT" untuk waktu siang hari bagian timur.
Anda bisa mendapatkan hal yang sama dari fungsi i18n standar yang lebih baru "Intl.DateTimeFormat ()" tetapi Anda harus memberitahukannya untuk menyertakan waktu melalui opsi atau itu hanya akan memberikan tanggal.
sumber
Ini adalah fungsi saya untuk zona waktu klien, ringan dan sederhana
sumber
Periksa ini:
sumber
Tidak diperlukan moment.js: Berikut adalah jawaban pulang-pergi lengkap, dari jenis input "datetime-local" yang mengeluarkan string ISOLocal ke UTCseconds pada GMT dan sebaliknya:
sumber
Hanya dua saya yang mengirim ke sini
Saya menghadapi masalah ini dengan waktu jadi yang saya lakukan adalah ini:
Kemudian simpan tanggal ke db agar dapat membandingkannya dari beberapa kueri.
Untuk memasang
moment-timezone
sumber
Jawaban saya adalah sedikit variasi bagi mereka yang hanya menginginkan tanggal hari ini di zona waktu lokal dalam format YYYY-MM-DD.
Biar saya perjelas:
Tujuan Saya: dapatkan tanggal hari ini dalam zona waktu pengguna tetapi dengan format ISO8601 (YYYY-MM-DD)
Ini kodenya:
Ini berfungsi karena lokal Swedia menggunakan format ISO 8601.
sumber
Berikut adalah fungsi yang saya gunakan untuk tujuan ini:
sumber
Anda dapat melakukannya dengan beberapa metode ekstensi sederhana. Metode ekstensi Tanggal berikut hanya mengembalikan komponen zona waktu dalam format ISO, lalu Anda dapat menentukan yang lain untuk bagian tanggal / waktu dan menggabungkannya untuk string offset tanggal-waktu yang lengkap.
Contoh penggunaan:
Saya tahu ini tahun 2020 dan kebanyakan orang mungkin menggunakan Moment.js sekarang, tetapi solusi salin & tempel sederhana terkadang masih berguna untuk dimiliki.
(Alasan saya membagi tanggal / waktu dan metode offset adalah karena saya menggunakan pustaka Datejs lama yang sudah menyediakan
toString
metode fleksibel dengan penentu format kustom, tetapi tidak menyertakan offset zona waktu. Oleh karena itu, saya menambahkantoISOLocaleString
untuk siapa pun yang tidak kata perpustakaan.)sumber