Saya menggunakan Moment.js untuk mem-parsing dan memformat tanggal di aplikasi web saya. Sebagai bagian dari objek JSON, server backend saya mengirimkan tanggal sebagai beberapa milidetik dari zaman UTC (Unix offset).
Mem-parsing tanggal dalam zona waktu tertentu itu mudah - cukup tambahkan pengidentifikasi zona waktu RFC 822 ke akhir string sebelum menguraikan:
// response varies according to your timezone
const m1 = moment('3/11/2012 13:00').utc().format("MM/DD HH:mm")
// problem solved, always "03/11 17:00"
const m2 = moment('3/11/2012 13:00 -0400').utc().format("MM/DD HH:mm")
console.log({ m1, m2 })
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
Tetapi bagaimana cara memformat tanggal dalam zona waktu tertentu ?
Saya ingin hasil yang konsisten terlepas dari waktu browser saat ini, tetapi saya tidak ingin menampilkan tanggal dalam UTC.
javascript
timezone
momentjs
tenang
sumber
sumber
DD MMM, YYYY
tidak berfungsi, ketika saya menggunakannya sukamoment.tz("2018-02-15T14:20:00.000+0530", "Asia/Bangkok").format("DD MMM, YYYY")
. Dapatkah seseorang menunjukkan saya pada dokumentasi di mana saya dapat menemukan semua kunci untuk memformat waktu ketika menggunakan api ini."15 Feb, 2018"
. Apakah Anda bermaksud menggunakan string formatDD MMMM, YYYY
untuk mendapatkan"15 February, 2018"
?Jawaban:
Seperti yang ditunjukkan dalam jawaban Manto ,
.utcOffset()
adalah metode yang disukai pada Momen 2.9.0. Fungsi ini menggunakan offset nyata dari UTC, bukan offset terbalik (mis., -240 untuk New York selama DST). String offset seperti "+0400" bekerja sama seperti sebelumnya:Yang lebih tua
.zone()
sebagai setter sudah tidak digunakan lagi di Moment.js 2.9.0. Ia menerima string yang berisi pengidentifikasi zona waktu (misalnya, "-0400" atau "-04: 00" selama -4 jam) atau angka yang mewakili menit di belakang UTC (misalnya, 240 untuk New York selama DST).Untuk bekerja dengan zona waktu bernama bukannya offset numerik, sertakan Moment Timezone dan gunakan
.tz()
sebagai gantinya:sumber
.zone()
sebagai pengambil, yang mengembalikan menit dari UTC (mis. Mengembalikan 300 untuk New York selama waktu standar)..tz("America/Phoenix")
jika Anda memasukkan momentjs.com/timezone juga. Saya telah memperbarui jawabannya dengan sebuah contoh.Gunakan zona waktu-saat
Sebelum dapat mengakses zona waktu tertentu, Anda harus memuatnya seperti itu (atau menggunakan metode alternatif yang dijelaskan di sini )
sumber
Beberapa jawaban sudah menyebutkan bahwa moment-timezone adalah cara untuk menggunakan timezone bernama. Saya hanya ingin menjelaskan sesuatu tentang perpustakaan ini yang cukup membingungkan bagi saya. Ada perbedaan antara dua pernyataan ini:
Dengan asumsi bahwa zona waktu tidak ditentukan dalam tanggal yang dilewati:
Kode pertama mengambil tanggal dan mengasumsikan zona waktu adalah yang dilewati. Kode kedua akan mengambil tanggal, menganggap zona waktu dari browser dan kemudian mengubah waktu dan zona waktu sesuai dengan zona waktu yang dilewati.
Contoh:
Zona waktu saya adalah +5 dari utc. Jadi dalam kasus pertama tidak berubah dan menetapkan tanggal dan waktu untuk memiliki zona waktu utc.
Dalam kasus kedua, diasumsikan tanggal yang dilewati berada di -5, lalu mengubahnya menjadi UTC, dan itulah sebabnya ia mengeluarkan tanggal "2018-07-18T00: 00: 00Z"
CATATAN: Parameter format sangat penting. Jika momen yang dihilangkan dapat kembali ke kelas Tanggal yang dapat perilaku yang tidak dapat diprediksi
Dengan asumsi zona waktu ditentukan pada tanggal yang dilewati:
Dalam hal ini mereka berdua berperilaku sama
Meskipun sekarang saya mengerti mengapa itu bekerja seperti itu, saya pikir ini adalah fitur yang cukup membingungkan dan layak untuk dijelaskan.
sumber
.zone () telah usang, dan Anda harus menggunakan utcOffset sebagai gantinya:
sumber
Saya mengalami masalah yang sama dengan Moment.js. Saya telah menginstal zona waktu, tetapi masalahnya tidak teratasi. Lalu, saya melakukan apa yang ada di sini, mengatur zona waktu dan berfungsi seperti pesona:
Terima kasih banyak!
sumber
new Date()
konstruktor. Momen menyediakan semua yang Anda butuhkan untuk menguraikan tanggal. Lihat Memilah dokumen.new Date()
internal), tetapi ini tidak konsisten di seluruh browser . Sebagai gantinya, Anda harus menggunakan menyediakan format yang diharapkan sebagai argumen kedua. Contoh:moment("12-25-1995", "MM-DD-YYYY")
.Baru saja datang acreoss ini, dan karena saya memiliki masalah yang sama, saya hanya memposting hasil yang saya dapatkan
saat parsing, Anda dapat memperbarui offset (yaitu saya mengurai data (1.1.2014) dan saya hanya menginginkan tanggal, 1 Januari 2014. Pada GMT + 1, saya mendapatkan 31.12.2013. Jadi, saya mengimbangi nilainya terlebih dahulu.
Ya, berguna bagi saya untuk mendukung lintas zona waktu
B
sumber
Anda bisa Coba ini,
Di sini Anda bisa mendapatkan tanggal berdasarkan Zona Waktu Klien (Browser).
Regex pada dasarnya memberi Anda nilai offset.
Bersulang!!
sumber