Menggunakan Moment.js saya tidak bisa mengubah objek momen yang benar menjadi objek tanggal dengan zona waktu. Saya tidak bisa mendapatkan tanggal yang benar.
Contoh:
var oldDate = new Date(),
momentObj = moment(oldDate).tz("MST7MDT"),
newDate = momentObj.toDate();
console.log("start date " + oldDate)
console.log("Format from moment with offset " + momentObj.format())
console.log("Format from moment without offset " + momentObj.utc().format())
console.log("(Date object) Time with offset " + newDate)
console.log("(Date object) Time without offset "+ moment.utc(newDate).toDate())
javascript
momentjs
vadim.zhiltsov
sumber
sumber
Wednesday 24th 2019, 12:47:48 am
apakah ini mungkin untuk dikonversi menjadi2019-04-23T19:17:48.000Z
? @ vadim.zhiltsov.tz("MST7MDT")
. Itu sebabnya perpustakaan seperti moment.tz ada, untuk melengkapi kemampuan tulang telanjang objek Date bawaan yang hanya memahami UTC dan zona waktu host, hanya itu.Jawaban:
Gunakan ini untuk mengubah objek momen menjadi objek tanggal:
Dari http://momentjs.com/docs/#/displaying/as-javascript-date/
Hasil:
sumber
toDate
memang cara mendapatkanDate
objek dari amoment
. Tetapi kode di badan pertanyaan menanyakan tentang konversi zona waktu - yangDate
tidak bisa dilakukan. Kecuali waktu Gunung memang zona waktu pengguna, maka saya tidak yakin bagaimana ini menjawab pertanyaan.moment("12/12/2011")
adalah tempat Anda mendapatkan pesan itu. Ini tidak ada hubungannya dengan pergi dari saat ke tanggalmoment().toDate()
Selama Anda menginisialisasi zona waktu saat dengan data untuk zona yang Anda inginkan , kode Anda berfungsi seperti yang diharapkan.
Anda mengubah momen dengan benar ke zona waktu, yang tercermin pada baris kedua dari keluaran
momentObj.format()
.Beralih ke UTC tidak hanya menjatuhkan offset, tetapi juga kembali ke zona waktu UTC. Jika Anda akan melakukan itu, Anda tidak perlu
.tz()
sama sekali panggilan asli . Anda bisa melakukannyamoment.utc()
.Mungkin Anda hanya mencoba mengubah string format output? Jika demikian, cukup tentukan parameter yang Anda ingin
format
metode:Mengenai baris terakhir ke kode Anda - ketika Anda kembali ke
Date
objek menggunakantoDate()
, Anda melepaskan perilaku moment.js dan kembali ke perilaku JavaScript.Date
Objek JavaScript akan selalu dicetak dalam zona waktu lokal dari komputer yang digunakan. Tidak ada momen. Aku bisa melakukan itu.Beberapa hal kecil lainnya:
Sementara konstruktor momen dapat mengambil
Date
, biasanya yang terbaik adalah tidak menggunakannya. Untuk "sekarang", jangan gunakanmoment(new Date())
. Sebaliknya, gunakan sajamoment()
. Keduanya akan bekerja tetapi tidak perlu berlebihan. Jika Anda mem-parsing dari string, berikan string itu langsung ke saat. Jangan mencoba menguraikannya menjadi yangDate
pertama. Anda akan menemukan pengurai momen jauh lebih dapat diandalkan.Zona Waktu seperti
MST7MDT
ada untuk alasan kompatibilitas ke belakang. Mereka berasal dari zona waktu gaya POSIX, dan hanya beberapa dari mereka yang ada di data TZDB. Kecuali mutlak diperlukan, Anda harus menggunakan kunci sepertiAmerica/Denver
.sumber
.toDate()
. 2) Jangan menggunakan komentar untuk mengajukan pertanyaan baru. Untuk itulah tombol "Ajukan Pertanyaan" yang besar itu..toDate
tidak benar-benar bekerja untuk saya, Jadi, Inilah yang saya lakukan:semoga ini membantu
sumber
moment().add(1, 'd').toDate()
.Karena momentjs tidak memiliki kontrol atas objek tanggal javascript saya menemukan pekerjaan untuk ini.
Ini akan memberi Anda objek tanggal javascript dengan waktu yang dikonversi
sumber
Saya perlu memiliki informasi zona waktu di string tanggal saya. Saya awalnya menggunakan
moment.tz(dateStr, 'America/New_York').toString();
tetapi kemudian saya mulai mendapatkan kesalahan tentang memberi makan string itu kembali ke saat.Saya mencoba
moment.tz(dateStr, 'America/New_York').toDate();
tetapi kemudian saya kehilangan informasi zona waktu yang saya butuhkan.Satu-satunya solusi yang mengembalikan string tanggal yang dapat digunakan dengan zona waktu yang dapat dimasukkan kembali ke saat itu adalah
moment.tz(dateStr, 'America/New_York').format();
sumber
bagus dan bersih !!!!
sumber
Untuk mengonversi tanggal apa pun, misalnya utc:
sumber
moment().utc()
mengembalikan nilai untuk UTC, lalu.format( "YYYY-MM-DD HH:mm:ss" )
mengembalikan string yang telah diatur ke UTC tanpa offset zona waktu sehingga diuraikan sebagai lokal. Itu tidak cocok dengan format momen default sehingga diurai oleh pengurai bawaan. Ini juga tidak cocok dengan format yang didukung ECMAScript, jadi penguraian tergantung pada implementasi. Lagi pula, ini diuraikan sebagai lokal sehingga offset zona waktu diterapkan kembali saat membuat nilai waktu Tanggal.Pertanyaannya sedikit tidak jelas. Saya akan melakukan yang terbaik untuk menjelaskan ini. Pertama, Anda harus memahami cara menggunakan zona waktu-saat . Menurut jawaban ini di sini TypeError: moment (). Tz bukan fungsi , Anda harus mengimpor momen dari moment-timezone alih - alih momen default (ofcourse Anda harus menginstal npm moment-timezone terlebih dahulu!). Demi kejelasan,
Sekarang untuk menggunakan fitur zona waktu, gunakan moment.tz ("date_string / moment ()", "time_zone") (kunjungi https://momentjs.com/timezone/ untuk lebih jelasnya). Fungsi ini akan mengembalikan objek momen dengan zona waktu tertentu. Demi kejelasan,
Sekarang ketika Anda mencoba mengonversi newYork (objek momen) dengan toDate momen () (konversi format ISO 8601), Anda akan mendapatkan waktu di Greenwich, Inggris. Untuk lebih jelasnya, baca artikel ini https://www.nhc.noaa.gov/aboututc.shtml , tentang UTC. Namun jika Anda hanya ingin waktu lokal Anda dalam format ini (waktu New York, sesuai dengan contoh ini), tambahkan saja metode .utc (true) , dengan arg true , ke objek momen Anda. Demi kejelasan,
Singkatnya, moment.tz mempertimbangkan zona waktu yang Anda tentukan dan membandingkan waktu lokal Anda dengan waktu di Greenwich untuk memberi Anda hasil. Saya harap ini bermanfaat.
sumber
moment telah memperbarui js lib pada 06/2018.
jika Anda memiliki kebebasan untuk menggunakan Angular5 +, maka lebih baik gunakan fitur datePipe di sana daripada fungsi zona waktu di sini. Saya harus menggunakan moment.js karena proyek saya hanya terbatas pada Angular2.
sumber
coba (tanpa
format
langkah)Tampilkan cuplikan kode
sumber
new Date(moment())
setara dengannew Date()
. Zona waktu hanya ditetapkan untuk d .