konversikan tanggal iso ke milidetik dalam javascript

89

Bisakah saya mengonversi tanggal iso ke milidetik? misalnya saya ingin mengubah iso ini

2012-02-10T13:19:11+0000

hingga milidetik.

Karena saya ingin membandingkan tanggal sekarang dari tanggal dibuat. Dan tanggal dibuat adalah tanggal iso.

Robin Carlo Catacutan
sumber
1
Apa yang Anda maksud dengan "milidetik" tepatnya? Milidetik relatif terhadap titik waktu mana? Apakah yang Anda maksud stempel waktu UNIX?
Pekka
seperti di yahoo api, tanggal ditampilkan dalam milidetik 1328796537, tetapi di fb api, tanggal ditampilkan di iso2012-02-10T13:18:45+0000
Robin Carlo Catacutan
kemungkinan duplikat dari Bantuan parsing tanggal ISO 8601 di Javascript
mplungjan
@mplungjan terkait, tapi tidak persis. Saya ingin mendapatkan perbedaan antara dua waktu tersebut.
Robin Carlo Catacutan
Jadi gunakan tautan untuk menerjemahkannya ke tanggal terlebih dahulu dan lakukan date1.getTime() - date2.getTime()- hanya itu yang Anda butuhkan
mplungjan

Jawaban:

151

Coba ini

var date = new Date("11/21/1987 16:00:00"); // some mock date
var milliseconds = date.getTime(); 
// This will return you the number of milliseconds
// elapsed from January 1, 1970 
// if your date is less than that date, the value will be negative

console.log(milliseconds);

EDIT

Anda telah memberikan tanggal ISO. Itu juga diterima oleh konstruktor Dateobjek

var myDate = new Date("2012-02-10T13:19:11+0000");
var result = myDate.getTime();
console.log(result);

Sunting

Yang terbaik yang saya temukan adalah menghilangkan offset secara manual.

var myDate = new Date("2012-02-10T13:19:11+0000");
var offset = myDate.getTimezoneOffset() * 60 * 1000;

var withOffset = myDate.getTime();
var withoutOffset = withOffset - offset;
console.log(withOffset);
console.log(withoutOffset);

Sepertinya bekerja. Sejauh masalah dengan mengubah string ISO menjadi Dateobjek, Anda dapat merujuk ke tautan yang disediakan.

EDIT

Memperbaiki bug dengan konversi yang salah menjadi milidetik menurut komentar Prasad19sara.

Oybek
sumber
Ya, Tanggal tidak akan diurai di semua browser. Lihat jawaban saya pada pertanyaan terkait.
Vik David
Dan lihat komentar saya tentang jawabannya di bawah Anda;)
mplungjan
Ini tidak berfungsi di Firefoxvar myDate = new Date("2012-02-10T13:19:11+0000");
mplungjan
1
@mplungjan mengapa Anda tidak menggunakan pendekatan ini ? Saya tahu ini tidak praktis, tetapi bagaimanapun))
Oybek
eh ... itu yang dilakukan huruf "T" di sana? Itu sebabnya @mplungjan tidak berhasil.
wle8300
28

Singkatan dari solusi sebelumnya adalah

var myDate = +new Date("2012-02-10T13:19:11+0000");

Itu melakukan konversi tipe on the fly dan langsung mengeluarkan tanggal dalam format milidetik.

Cara lain juga menggunakan metode parse dari Date util yang hanya mengeluarkan waktu EPOCH dalam milidetik.

var myDate = Date.parse("2012-02-10T13:19:11+0000");
Tahsin Turkoz
sumber
Ada sedikit kesalahan ketik di sana, '+'
Stuart Siegler
@ stuart-siegler Sebenarnya tidak ada kesalahan ketik, '+' mengembalikan Tanggal dalam milidetik.
LordTribual
@LordTribual "+ new" mengembalikan tanggal dalam milidetik?
Stuart Siegler
1
@ stuart-siegler Tidak secara spesifik "+ baru" tetapi "+" melakukan trik dan merupakan singkatan yang bisa dikatakan. Misalnya +new Date()pengembalian 1447857230137yang merupakan waktu dalam milidetik.
LordTribual
1
Jauh lebih jelas untuk secara eksplisit membuat objek Nomor JavaScript:, const dateMillis = Number(new Date('2017-09-26T20:24:18.801Z'))tetapi new Date('2017-09-26T20:24:18.801Z').getTime()atau new Date('2017-09-26T20:24:18.801Z').valueOf()bahkan lebih mudah dibaca.
David G
5

Opsi lain pada 2017 adalah menggunakan Date.parse(). Dokumentasi MDN menunjukkan, bagaimanapun, bahwa itu tidak dapat diandalkan sebelum ES5.

var date = new Date(); // today's date and time in ISO format
var myDate = Date.parse(date);

Lihat biola untuk lebih jelasnya.

samurai_jane
sumber
Pengurai bawaan juga tidak dapat diandalkan setelah ECMAScript 2011. :-)
RobG
2

Solusi lain yang mungkin adalah untuk membandingkan tanggal saat ini dengan January 1, 1970, Anda bisa mendapatkan January 1, 1970dengan new Date(0);

var date = new Date(); 
var myDate= date - new Date(0);
LingYan Meng
sumber
2

Ya, Anda dapat melakukannya dalam satu baris

let ms = Date.parse('2019-05-15 07:11:10.673Z');
console.log(ms);//1557904270673
Mohid Kazi
sumber
Apa kebalikan dari fungsi ini !?
AG1
1

Solusi lain dapat menggunakan Number object parser seperti ini:

let result = Number(new Date("2012-02-10T13:19:11+0000"));
let resultWithGetTime = (new Date("2012-02-10T13:19:11+0000")).getTime();
console.log(result);
console.log(resultWithGetTime);

Ini mengkonversi ke milidetik seperti getTime()pada Dateobjek

Mamba hitam
sumber
0
var date = new Date()
console.log(" Date in MS last three digit = "+  date.getMilliseconds())
console.log(" MS = "+ Date.now())

Dengan menggunakan ini kita bisa mendapatkan tanggal dalam milidetik

JibinNajeeb
sumber
0

var date = new Date (date_string); var milidetik = date.getTime ();

Ini berhasil untuk saya!

Visakh Vijayan
sumber
0

jika ingin mengubah tanggal UTC menjadi
sintaks milidetik : Date.UTC (tahun, bulan,? hari,? jam,? min,? sec,? milidetik);
misal:
date_in_mili = Date.UTC(2020, 07, 03, 03, 40, 40, 40);
console.log('miliseconds', date_in_mili);

Siddharth
sumber
0

Jika ada yang ingin mengambil hanya Waktu dari Tanggal ISO, berikut akan sangat membantu. Saya sedang mencari itu dan saya tidak dapat menemukan pertanyaan untuk itu. Jadi jika ada yang melihat akan membantu.

let isoDate = '2020-09-28T15:27:15+05:30';
let result = isoDate.match(/\d\d:\d\d/);
console.log(result[0]);

Outputnya adalah satu-satunya waktu dari isoDate yang,

15:27
Niroshan Ratnayake
sumber