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.


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


@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.


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");

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.


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);

2

Ya, Anda dapat melakukannya dalam satu baris

let ms = Date.parse('2019-05-15 07:11:10.673Z');
console.log(ms);//1557904270673

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


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


0

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

Ini berhasil untuk saya!


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);


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.