Bagaimana saya bisa mengonversi string menjadi tanggal dalam JavaScript?
var st = "date in some format"
var dt = new date();
var dt_st= //st in date format same as dt
javascript
date
type-conversion
date-parsing
pelawak
sumber
sumber
Date -> String
atauString -> Date
?Jawaban:
Format string terbaik untuk penguraian string adalah format ISO tanggal bersama dengan konstruktor objek Tanggal JavaScript.
Contoh format ISO:
YYYY-MM-DD
atauYYYY-MM-DDTHH:MM:SS
.Tapi tunggu! Hanya menggunakan "format ISO" tidak bekerja dengan baik. String kadang-kadang diurai sebagai UTC dan kadang-kadang sebagai waktu lokal (berdasarkan vendor dan versi browser). Praktik terbaik harus selalu menyimpan tanggal sebagai UTC dan membuat perhitungan sebagai UTC.
Untuk mengurai tanggal sebagai UTC, tambahkan Z - misalnya:
new Date('2011-04-11T10:20:30Z')
.Untuk menampilkan tanggal dalam UTC, gunakan
.toUTCString()
,untuk menampilkan tanggal dalam waktu setempat pengguna, gunakan
.toString()
.Info lebih lanjut tentang MDN | Tanggal dan jawaban ini .
Untuk kompatibilitas Internet Explorer tua (versi IE kurang dari 9 tidak mendukung format ISO di Tanggal konstruktor), Anda harus membagi datetime representasi string ke bagian itu dan kemudian Anda dapat menggunakan konstruktor menggunakan datetime bagian, misalnya:
new Date('2011', '04' - 1, '11', '11', '51', '00')
. Perhatikan bahwa jumlah bulan harus 1 lebih sedikit.Metode alternatif - gunakan perpustakaan yang sesuai:
Anda juga dapat memanfaatkan perpustakaan Moment.js yang memungkinkan parsing tanggal dengan zona waktu yang ditentukan.
sumber
new Date('2011-04-11T11:51:00')
tanggal yang dibuat valid.new Date('1970-30-02')
tanggal tidak valid karena tidak ada 30 bulan dalam setahun. Anda tidak dapat melimpahi bulan, tetapi ketika Anda melimpah hari, maka itu diselesaikan di Chrome dan Firefox ke tanggal yang valid:new Date('1970-02-30')
maka hari itu sama dengan Tanggal baru ('1970-03-02').Sayangnya saya tahu itu
mengembalikan "Rab 02 Apr 2014". Saya tahu kedengarannya gila, tetapi itu terjadi untuk beberapa pengguna.
The solusi antipeluru adalah sebagai berikut:
sumber
yyyy-MM-dd
diuraikan sebagai UTC dan toString mengembalikan waktu setempat karena itu tergantung pada zona waktu pengguna itu pasti dapat mengembalikan hasil yang berbeda. Jika selalu menginginkan waktu sebagai UTC maka Anda harus menggunakan toUTCString .Dan hasilnya adalah:
sumber
sumber
.indexOf()
metode ini karena tidak kompatibel lintas browser tanpa polyfils. Sebaliknya, gunakan metode JS yang lebih kompatibel.match()
atau.test()
vanilla.var _delimiter = _format.match(/\W/g)[0];
di awal fungsi Anda bisa mendapatkan pembatas secara otomatis dan prescind dari parameter ke-3.moment.js ( http://momentjs.com/ ) adalah paket lengkap dan bagus untuk tanggal penggunaan dan mendukung string ISO 8601 .
Anda dapat menambahkan tanggal dan format string.
Dan Anda dapat memeriksa apakah suatu tanggal valid.
Beberapa contoh tampilan
Lihat dokumentasi http://momentjs.com/docs/#/parsing/string-format/
sumber
let dt = moment("02-01-2019", "MM-DD-YYYY");console.log(dt.fromNow()+' | '+dt.format('LL'))
keluaran: "3 bulan lalu | 1 Februari 2019"Berikan sebagai argumen untuk Date ():
Anda dapat mengakses tanggal, bulan, tahun menggunakan, misalnya:
dt.getMonth()
.sumber
console.log(new Date('30-08-2018'))
dan dapatkan tanggal yang tidak valid01/02/2020
di komputer saya (di Inggris) itu akan mengembalikan 1 Februari di mana seolah-olah hal yang sama dilakukan di AS itu akan kembali 2 Januari. Anda seharusnya tidak pernah menggunakan implementasi naif ini. Gunakan momen saja.Jika Anda dapat menggunakan pustaka momen yang hebat (mis. Dalam proyek Node.js), Anda dapat dengan mudah menguraikan tanggal dengan menggunakan mis.
dan dapat mengakses objek tanggal JS melalui
sumber
new Date(2000, 10, 1)
akan memberi Anda "Rab 01 Nov 2000 00:00:00 GMT + 0100 (CET)"Lihat 0 untuk bulan memberi Anda Januari
sumber
Bagi mereka yang mencari solusi kecil dan cerdas:
Contoh:
sumber
Hanya
new Date(st);
Dengan asumsi bahwa itu format yang tepat .
sumber
Jika Anda ingin mengonversi dari format "dd / MM / yyyy". Berikut ini sebuah contoh:
Solusi ini berfungsi dalam versi IE kurang dari 9.
sumber
Stempel waktu harus dicantumkan ke suatu Angka
sumber
undefined
nilainya? Sukavar date = new Date(undefined)
:?Date.parse
hampir membuat Anda mendapatkan apa yang Anda inginkan. Itu tersedak pada bagianam
/pm
, tetapi dengan beberapa peretasan Anda bisa membuatnya bekerja:sumber
Konversikan ke format pt-BR:
Saya harap tolong seseorang !!!
sumber
Saya telah membuat biola untuk ini, Anda dapat menggunakan fungsi toDate () pada string tanggal apa pun dan memberikan format tanggal. Ini akan mengembalikan Anda objek Date. https://jsfiddle.net/Sushil231088/q56yd0rp/
sumber
Untuk mengkonversi string ke tanggal di js saya gunakan
http://momentjs.com/
sumber
Saya membuat fungsi ini untuk mengkonversi objek Date ke objek UTC Date.
sumber
Namun cara lain untuk melakukannya:
sumber
Anda dapat mencoba ini:
sumber
atau
string tanggal dalam format '01 -01-1970 'tidak akan berfungsi di FireFox, jadi lebih baik gunakan "/" daripada "-" dalam string format tanggal.
sumber
Jika Anda perlu memeriksa konten string sebelum mengonversi ke format Tanggal:
sumber
Saya telah membuat fungsi parseDateTime untuk mengonversi objek string ke tanggal dan berfungsi di semua browser (termasuk browser IE), periksa apakah ada yang diperlukan, referensi https://github.com/Umesh-Markande/Parse-String-to-Date -di-semua-browser
sumber
Jawaban ini didasarkan pada jawaban Kassem tetapi juga menangani dua digit tahun. Saya mengirimkan suntingan ke jawaban Kassem, tetapi jika itu tidak disetujui, saya juga mengirimkan ini sebagai jawaban terpisah.
sumber
Anda dapat menggunakan regex untuk mem-parsing string ke detail waktu kemudian membuat tanggal atau format pengembalian seperti:
sumber
Performa
Hari ini (2020.05.08) Saya melakukan tes untuk solusi yang dipilih - untuk dua kasus: tanggal input adalah string ISO8601 (Iklan, Bd, Cd, Dd, Ed) dan tanggal input adalah stempel waktu (At, Ct, Dt). Solusi Bd, Cd, Ct tidak mengembalikan objek Date js sebagai hasil, tapi saya menambahkannya karena mereka bisa berguna tetapi saya tidak membandingkannya dengan solusi yang valid. Hasil ini dapat bermanfaat untuk penguraian tanggal yang besar.
Kesimpulan
new Date
(Iklan) adalah 50-100x lebih cepat daripada moment.js (Dd) untuk semua browser untuk tanggal dan cap waktu ISOnew Date
(Iklan) ~ 10x lebih cepat dariparseDate
(Ed)Date.parse
(Bd) adalah tercepat jika kita perlu mendapatkan cap waktu dari tanggal ISO di semua browserDetail
Saya melakukan pengujian pada MacOs High Sierra 10.13.6 di Chrome 81.0, Safari 13.1, Firefox 75.0. Solusi
parseDate
(Ed) digunakannew Date(0)
dan secara manual mengatur komponen tanggal UTC.Tampilkan cuplikan kode
Hasil untuk chrome
sumber
Datestrings ISO 8601-esque, sebagus standarnya, masih belum didukung secara luas.
Ini adalah sumber yang bagus untuk mengetahui format datestring mana yang harus Anda gunakan:
http://dygraphs.com/date-formats.html
Ya, itu berarti bahwa data Anda bisa sesederhana yang bertentangan
"2014/10/13 23:57:52"
dari pada"2014-10-13 23:57:52"
sumber
sumber
gunakan kode ini: (masalah saya terpecahkan dengan kode ini)
}
sumber
Saya menulis fungsi yang dapat digunakan kembali yang saya gunakan ketika saya mendapatkan string tanggal dari server.
Anda dapat melewati pembatas yang Anda inginkan (/ - dll.) yang memisahkan hari bulan dan tahun untuk menggunakan
split()
metode ini.Anda dapat melihat & mengujinya pada contoh kerja ini .
sumber
Namun cara lain untuk melakukannya adalah membangun regex dengan kelompok tangkapan bernama di atas string format dan kemudian menggunakan regex itu untuk mengekstrak hari, bulan, dan tahun dari string tanggal:
sumber