Wie konvertiere ich Datum in Zeitstempel?

165

Ich möchte Datum in Zeitstempel konvertieren, meine Eingabe ist 26-02-2012. ich benutzte

new Date(myDate).getTime();

Es heißt NaN .. Kann jemand sagen, wie man das konvertiert?

selladurai
quelle
mögliches Duplikat von stackoverflow.com/questions/9343971/…
Bogdan Emil Mariesan
Vielleicht möchten Sie einen Blick auf die Bibliothek date.js
werfen
1
Haben Sie Date(myDate).getTime()(was Sie als Code markiert haben) verwendet oder soll das Wort "neu" vorher Teil des Codes sein? Je mehr Aufwand Sie betreiben, desto besser werden die Antworten sein.
TJ Crowder
@rsbarro: Außer es scheint nicht mehr gewartet zu werden (und es gibt ausstehende Fehler). MomentJS scheint jedoch ziemlich gut zu sein.
TJ Crowder
@TJCrowder Ich habe date.js verwendet und es hat für das funktioniert, wofür ich es gebraucht habe, aber Sie haben Recht, es wurde seit einiger Zeit nicht mehr aktiv bearbeitet. Ich werde momentjs überprüfen. Vielen Dank!
Rsbarro

Antworten:

202
var myDate = "26-02-2012";
myDate = myDate.split("-");
var newDate = myDate[1]+","+myDate[0]+","+myDate[2];
console.log(new Date(newDate).getTime());​

Aktualisieren:

var myDate = "26-02-2012";
myDate = myDate.split("-");
var newDate = myDate[1]+"/"+myDate[0]+"/"+myDate[2];
console.log(new Date(newDate).getTime());

DEMO (Getestet in Chrome, FF, Opera, IE und Safari).

Das Alpha
quelle
Leider funktioniert dies in Safari5 nicht, da es zurückkehrt NaN. In Safari müssen Sie den anderen möglichen Konstruktor new Date(year, month, day);für dieses Beispiel verwenden:new Date(myDate[2], myDate[1], myDate[0]);
insertusernamehere
13
Anstatt die Datumszeichenfolge vom "europäischen" in das "amerikanische" Format zu konvertieren, ist es besser, sie in das ISO 8601-Format ( YYYY-MM-DD) zu konvertieren , das garantiert verstanden wird Date()und im Allgemeinen das interoperabelste Format für Datumszeichenfolgen ist.
Walter Tross
3
Hinweis: new Date(newDate).getTime()Erzeugt einen Zeitstempel in Millisekundenauflösung.
7.
3
Für Sekunden verwenden: Math.floor(new Date(newDate).getTime() / 1000)
Metamagikum
54

Probieren Sie diese Funktion aus, sie verwendet die Date.parse () -Methode und erfordert keine benutzerdefinierte Logik:

function toTimestamp(strDate){
   var datum = Date.parse(strDate);
   return datum/1000;
}
alert(toTimestamp('02/13/2009 23:31:30'));
Ketan Savaliya
quelle
25
var dtstr = "26-02-2012";
new Date(dtstr.split("-").reverse().join("-")).getTime();
Diode
quelle
24

Dieser überarbeitete Code wird es tun

let toTimestamp = strDate => Date.parse(strDate)

Dies funktioniert auf allen modernen Browsern außer ie8-

Jalasem
quelle
10

Hier gibt es zwei Probleme. Erstens können Sie getTime nur an einer Instanz des Datums aufrufen. Sie müssen ein neues Datum in Klammern setzen oder es einer Variablen zuweisen.

Zweitens müssen Sie ihm eine Zeichenfolge in einem geeigneten Format übergeben.

Arbeitsbeispiel:

(new Date("2012-02-26")).getTime();
Alan Bogu
quelle
1
Es ist nicht erforderlich, das Datum sofort in eine Klammer zu setzen. Es ist nur ein geeignetes Zeichenfolgenformat erforderlich.
Maswerdna
5

Sie müssen nur Ihre Datumsziffer umkehren und ändern -mit ,:

 new Date(2012,01,26).getTime(); // 02 becomes 01 because getMonth() method returns the month (from 0 to 11)

In deinem Fall:

 var myDate="26-02-2012";
 myDate=myDate.split("-");
 new Date(parseInt(myDate[2], 10), parseInt(myDate[1], 10) - 1 , parseInt(myDate[0]), 10).getTime();

Das Gebietsschema von PS UK spielt hier keine Rolle.

antonjs
quelle
Dieses Datumsformat ist ebenfalls ungültig und funktioniert nicht zuverlässig browser- und länderübergreifend (z. B. in Chrome mit dem britischen Gebietsschema nicht). Wenn Sie ein Format vorschlagen möchten, schlagen Sie eines vor, das tatsächlich dokumentiert ist, um zu funktionieren.
TJ Crowder
Ich erhalte das Beispiel von developer.mozilla.org/en/JavaScript/Reference/Global_Objects/… . Ich habe nur vergessen, die Schnur wegzulegen. Jetzt gehts.
Antonjs
2
Okay, zumindest verwendet der obige Code jetzt kein ungültiges Datumsformat - er gibt aus zwei verschiedenen Gründen nur das falsche Datum an. Oben haben Sie das Datum 2. März 2014 definiert (Sie haben die Feldreihenfolge durcheinander gebracht). Und wenn die Felder in der richtigen Reihenfolge sind, würden Sie das Datum werden definiert , März 26th, 2012 (Monatswerte beginnen bei Null). Da das OP jedoch eine Zeichenfolge und keine Reihe von Zahlen enthält, ist es nicht allzu nützlich, selbst wenn Sie diese Probleme angesprochen haben.
TJ Crowder
@TJ Crowder danke für deine Vorschläge. Ich habe den Code wie gesagt korrigiert und den String in eine Zahl umgewandelt. Merci.
Antonjs
2
Das erste Codebeispiel ist immer noch falsch , und die Verwendung Numbervon Zeichenfolgen, die mit a beginnen, 0ist bei einigen Engines problematisch. Verwenden parseIntund spezifizieren Sie einen Radix.
TJ Crowder
5
function getTimeStamp() {
       var now = new Date();
       return ((now.getMonth() + 1) + '/' + (now.getDate()) + '/' + now.getFullYear() + " " + now.getHours() + ':'
                     + ((now.getMinutes() < 10) ? ("0" + now.getMinutes()) : (now.getMinutes())) + ':' + ((now.getSeconds() < 10) ? ("0" + now
                     .getSeconds()) : (now.getSeconds())));
}
deepakssn
quelle
4

Um das (ISO-) Datum in einen Unix-Zeitstempel umzuwandeln , erhielt ich einen Zeitstempel, der 3 Zeichen länger als nötig war, sodass mein Jahr ungefähr 50.000 ...

Ich musste es um 1000 teilen: new Date('2012-02-26').getTime() / 1000

orszaczky
quelle
3

Für diejenigen, die einen lesbaren Zeitstempel im Format haben möchten, yyyymmddHHMMSS

> (new Date()).toISOString().replace(/[^\d]/g,'')              // "20190220044724404"
> (new Date()).toISOString().replace(/[^\d]/g,'').slice(0, -3) // "20190220044724"
> (new Date()).toISOString().replace(/[^\d]/g,'').slice(0, -9) // "20190220"

Anwendungsbeispiel: eine Sicherungsdateierweiterung. /my/path/my.file.js.20190220

allenhwkim
quelle
3

Falls Sie hierher gekommen sind, um nach dem aktuellen Zeitstempel zu suchen

  var date      = new Date();
  var timestamp = date.getTime();

TLDR:

new Date().getTime();
//console.log(new Date().getTime());
TimeTrax
quelle
2

Ihre Zeichenfolge hat nicht das Format, für das das DateObjekt angegeben ist . Sie müssen es selbst analysieren, eine Datumsanalysebibliothek wie MomentJS oder die ältere (und soweit ich das nicht beurteilen kann) DateJS verwenden oder sie in das richtige Format (z. B. ) einmassieren , 2012-02-29bevor Sie sie Dateanalysieren möchten .

Warum Sie erhalten NaN: Wenn Sie new Date(...)nach einer ungültigen Zeichenfolge fragen , wird ein DateObjekt zurückgegeben, das auf ein ungültiges Datum festgelegt ist ( new Date("29-02-2012").toString()Rückgabe "Invalid date"). Das Aufrufen getTime()eines Datumsobjekts in diesem Status wird zurückgegeben NaN.

TJ Crowder
quelle
@benvds: Cool, danke. Obwohl ich den Kommentar "Außerdem ist er für das DOM zerstörungsfrei" etwas seltsam finde ... Ich Dategehe davon aus, dass das Objekt dadurch nicht verändert wird (was nichts mit dem DOM zu tun hat).
TJ Crowder
2
/**
 * Date to timestamp
 * @param  string template
 * @param  string date
 * @return string
 * @example         datetotime("d-m-Y", "26-02-2012") return 1330207200000
 */
function datetotime(template, date){
    date = date.split( template[1] );
    template = template.split( template[1] );
    date = date[ template.indexOf('m') ]
        + "/" + date[ template.indexOf('d') ]
        + "/" + date[ template.indexOf('Y') ];

    return (new Date(date).getTime());
}
Evgeniy
quelle
0

Die Antworten wurden von anderen Entwicklern bereitgestellt, aber auf meine eigene Weise können Sie dies im laufenden Betrieb tun, ohne eine benutzerdefinierte Funktion wie folgt zu erstellen:

var timestamp = Date.parse("26-02-2012".split('-').reverse().join('-'));
alert(timestamp); // returns 1330214400000
Frederick Eze
quelle