Konvertieren Sie ISO-Datum in Millisekunden in Javascript

86

Kann ich das ISO-Datum in Millisekunden konvertieren? Zum Beispiel möchte ich diese ISO konvertieren

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

in Millisekunden.

Weil ich das aktuelle Datum mit dem Erstellungsdatum vergleichen möchte. Das Erstellungsdatum ist ein ISO-Datum.

Robin Carlo Katakutan
quelle
1
Was genau meinst du mit "Millisekunden"? Millisekunden relativ zu welchem ​​Zeitpunkt? Meinen Sie einen UNIX-Zeitstempel?
Pekka
Genau wie in Yahoo API wird das Datum in Millisekunden angezeigt 1328796537, aber in FB Api wird das Datum in 2012-02-10T13:18:45+0000
ISO
Mögliches Duplikat der Hilfe beim Parsen des ISO 8601-Datums in Javascript
mplungjan
@mplungjan verwandt, aber nicht genau. Ich möchte den Unterschied zwischen den beiden Zeiten bekommen.
Robin Carlo Catacutan
Verwenden Sie also den Link, um sie zuerst in Daten zu übersetzen und date1.getTime() - date2.getTime()- es ist alles, was Sie brauchen
mplungjan

Antworten:

144

Versuche dies

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

BEARBEITEN

Sie haben ein ISO-Datum angegeben. Es wird auch vom Konstruktor des DateObjekts akzeptiert

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

Bearbeiten

Das Beste, was ich gefunden habe, ist, den Offset manuell zu entfernen.

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

Scheint zu funktionieren. Bei Problemen mit der Konvertierung von ISO-Zeichenfolgen in das DateObjekt können Sie auf die bereitgestellten Links verweisen.

BEARBEITEN

Der Fehler mit falscher Konvertierung in Millisekunden gemäß dem Kommentar von Prasad19sara wurde behoben.

Oybek
quelle
Ja, das Datum wird nicht in allen Browsern analysiert. Siehe meine Antwort auf verwandte Fragen.
Vik David
Und siehe meinen Kommentar zur Antwort unter deiner;)
mplungjan
Dies funktioniert nicht in Firefoxvar myDate = new Date("2012-02-10T13:19:11+0000");
mplungjan
1
@mplungjan warum benutzt du diesen Ansatz nicht ? Ich weiß, dass dies umständlich ist, aber trotzdem))
Oybek
äh ... das ist das Kapital "T", das da drin ist? Deshalb funktioniert es nicht @mplungjan.
wle8300
28

Eine Abkürzung der vorherigen Lösungen ist

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

Es führt eine direkte Konvertierung durch und gibt das Datum direkt im Millisekundenformat aus.

Eine andere Möglichkeit ist die Verwendung der Parse-Methode von Date util, bei der die EPOCH-Zeit nur in Millisekunden ausgegeben wird.

var myDate = Date.parse("2012-02-10T13:19:11+0000");
Tahsin Turkoz
quelle
Sie haben dort einen kleinen Tippfehler, '+'
Stuart Siegler
@ stuart-siegler Das ist eigentlich kein Tippfehler, das '+' gibt das Datum in Millisekunden zurück.
LordTribual
@LordTribual "+ new" gibt das Datum in Millisekunden zurück?
Stuart Siegler
1
@ stuart-siegler Nicht speziell "+ neu", aber das "+" macht den Trick und ist sozusagen eine Abkürzung. Beispiel: +new Date()Gibt 1447857230137die Zeit in Millisekunden zurück.
LordTribual
1
Es ist viel klarer, ein JavaScript-Nummernobjekt explizit zu erstellen : const dateMillis = Number(new Date('2017-09-26T20:24:18.801Z')), aber new Date('2017-09-26T20:24:18.801Z').getTime()oder new Date('2017-09-26T20:24:18.801Z').valueOf()ist noch besser lesbar.
David G
5

Eine weitere Option ab 2017 ist die Verwendung Date.parse(). In der Dokumentation von MDN wird jedoch darauf hingewiesen, dass es vor ES5 unzuverlässig ist.

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

Siehe die Geige für weitere Details.

samurai_jane
quelle
Der eingebaute Parser ist auch nach ECMAScript 2011 unzuverlässig . :-)
RobG
2

Eine weitere mögliche Lösung ist mit dem aktuellen Datum zu vergleichen January 1, 1970, können Sie sich January 1, 1970durch new Date(0);

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

Ja, Sie können dies in einer einzigen Zeile tun

let ms = Date.parse('2019-05-15 07:11:10.673Z');
console.log(ms);//1557904270673
Mohid Kazi
quelle
Was ist das Gegenteil dieser Funktion?
AG1
1

Eine andere Lösung könnte darin bestehen, den Number-Objekt-Parser wie folgt zu verwenden:

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

Dies wird wie getTime()bei einem DateObjekt in Millisekunden konvertiert

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

Damit können wir das Datum in Millisekunden erhalten

JibinNajeeb
quelle
0

var date = neues Datum (date_string); var Millisekunden = date.getTime ();

Das hat bei mir funktioniert!

Visakh Vijayan
quelle
0

Wenn Sie das UTC-Datum in eine Millisekunden-
Syntax konvertieren möchten: Date.UTC (Jahr, Monat, Tag, Stunden, Min., Sek., Milisec);
z.B :
date_in_mili = Date.UTC(2020, 07, 03, 03, 40, 40, 40);
console.log('miliseconds', date_in_mili);

Siddharth
quelle
0

Für den Fall, wenn jemand will nur die Uhrzeit von einem ISO-Datum , ist Folgendes hilfreich. Ich habe danach gesucht und konnte keine Frage dafür finden. Für den Fall, dass jemand sieht, wird dies hilfreich sein.

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

Die Ausgabe ist die einzige Zeit von isoDate, die ist,

15:27
Niroshan Ratnayake
quelle