Konvertieren Sie das normale Datum in einen Unix-Zeitstempel


104

Wie kann ich ein normales Datum 2012.08.10in einen Unix-Zeitstempel in Javascript konvertieren ?

Fiddle: http://jsfiddle.net/J2pWj/




Ich habe hier viele Beiträge gesehen, die es in PHP, Ruby usw. konvertieren. Aber ich muss dies in JS tun.



1
Haben Sie newDate.getTime () / 1000 ausprobiert?
Gareth Parker

@LokiAstari ja, sorry. Ich habe gesucht, aber das nicht gefunden.
Stan

1
Vielleicht fehlt mir etwas, aber es unix timestampist so grundlegend für die gesamte Technik und Informatik. Ich wünschte, es gäbe eine eingebaute Komfortmethode. Zur Zeit benutze ichMath.floor((+new Date()) / 1000);
Mars Robertson

Antworten:


209
new Date('2012.08.10').getTime() / 1000

Überprüfen Sie die Dokumentation zum JavaScript-Datum .


1
Vielen Dank für die Dokumentationsseite. Ich habe getan, was ich wollte.
Stan

32
Math.floor es oder es ist kein Unix-Zeitstempel (es wird eine Dezimalstelle haben)
BT

@ fguillen, Mooseman, ich laufe und überprüfe diesen Code. Sobald ich den Unix-Zeitstempel auf den neuesten Stand gebracht habe, erhalte ich den 2012.08.09 anstelle des 2012.08.10. Warum ist das so..?
WP Learner

@ user2584538, siehe meine Antwort unten. Sie müssen die Dezimalstellen entfernen.
theVinchi

1
@ Mentor UNIX Zeit wird in Sekunden gemessen, nicht in Millisekunden
Nicu Surdu

59
parseInt((new Date('2012.08.10').getTime() / 1000).toFixed(0))

Es ist wichtig, das hinzuzufügen toFixed(0), um Dezimalstellen zu entfernen, wenn durch 1000 dividiert wird, um von Millisekunden in Sekunden umzuwandeln.

Die .getTime()Funktion gibt den Zeitstempel in Millisekunden zurück, echte Unix-Zeitstempel jedoch immer in Sekunden.


5
Beachten Sie nur, dass dies eine Zeichenfolge und keine Zahl zurückgibt.
Capaj

3
Guter Punkt, die Antwort wurde geändert, um mit parseInt () zu umbrechen und wieder in eine Ganzzahl umzuwandeln.
theVinchi

11

Sie sollten sich die api moment.js ansehen, sie ist sehr einfach zu bedienen und verfügt über viele integrierte Funktionen.

Ich denke, für Ihr Problem könnten Sie so etwas verwenden:

var unixTimestamp = moment('2012.08.10', 'YYYY.MM.DD').unix();

9

var d = '2016-01-01T00:00:00.000Z';
console.log(new Date(d).valueOf()); // returns the number of milliseconds since the epoch


5

Sie können einfach den Operator unary + verwenden

(+new Date('2012.08.10')/1000).toFixed(0);

http://xkr.us/articles/javascript/unary-add/ - siehe unter Daten.


2
Ich möchte hier nur zwei Kommentare hinzufügen: Der unäre Operator add + wird nicht benötigt, da er /bereits ein mathematischer Operator ist. Auch toFixedgibt einen String und keine Nummer, falls der Typ ist wichtig ..
Laurens

3

Sie können Date.parse () verwenden , die akzeptierten Eingabeformate sind jedoch implementierungsabhängig. Wenn Sie das Datum jedoch in das ISO-Format (JJJJ-MM-TT) konvertieren können, sollten die meisten Implementierungen dies verstehen.

Siehe Warum liefert Date.parse falsche Ergebnisse? .


3
var date = new Date('2012.08.10');
var unixTimeStamp = Math.floor(date.getTime() / 1000);

In diesem Fall ist es wichtig, nur eine ganze Zahl zurückzugeben (eine einfache Unterteilung reicht also nicht aus) und auch nur tatsächlich verstrichene Sekunden zurückzugeben (deshalb verwendet dieser Code Math.floor()und nicht Math.round()).


2

Sie können dies mit der Date.parse () -Methode tun.

Date.parse($("#yourCustomDate).val())

Date.parse ("03.03.2016") Ausgabe-> 1456959600000

Ausgabe von Date.parse ("2015-12-12") -> 1449878400000


1
Wie unterscheidet sich diese Antwort von der von Barmar vor 6 Jahren?
Steinbock

1
var datestr = '2012.08.10';
var timestamp = (new Date(datestr.split(".").join("-")).getTime())/1000;

1

Nach dem Vergleich des Zeitstempels mit dem von PHP scheint keiner der oben genannten Punkte für meine Zeitzone korrekt zu sein. Der folgende Code gab mir das gleiche Ergebnis wie PHP, was für das Projekt, das ich mache, am wichtigsten ist.

function getTimeStamp(input) {
    var parts = input.trim().split(' ');
    var date = parts[0].split('-');
	var time = (parts[1] ? parts[1] : '00:00:00').split(':');

	// NOTE:: Month: 0 = January - 11 = December.
	var d = new Date(date[0],date[1]-1,date[2],time[0],time[1],time[2]);
	return d.getTime() / 1000;
}

// USAGE::
var start = getTimeStamp('2017-08-10');
var end = getTimeStamp('2017-08-10 23:59:59');

console.log(start + ' - ' + end);

Ich benutze dies auf NodeJS und wir haben die Zeitzone 'Australien / Sydney'. Also musste ich dies in die .env-Datei einfügen:

TZ = 'Australia/Sydney'

Oben ist äquivalent zu:

process.env.TZ = 'Australia/Sydney'

0

Zeitstempel in Unix-Zeitstempel konvertieren.

const date = 1513787412; const unixDate = new Date(date * 1000);// Dec 20 2020 (object)

um den timeStamp nach der Konvertierung zu erhalten const TimeStamp = new Date(date*1000).getTime(); //1513787412000

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.