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.

Stan
quelle
1
Mögliches Duplikat des Konvertierungsdatums zum Zeitstempel in Javascript?
Martin York
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 .

fguillen
quelle
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.

theVinchi
quelle
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();
Mahus
quelle
9

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

KARTHIKEYAN.A
quelle
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.

hybrid9
quelle
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? .

Barmar
quelle
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()).

dumitru
quelle
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

Nazar
quelle
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;
OptimusCrime
quelle
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'
Damodar Bashyal
quelle
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

Rajat
quelle