Wie kann ich eine Zeichenfolge in JavaScript in ein Datum konvertieren?
var st = "date in some format"
var dt = new date();
var dt_st= //st in date format same as dt
javascript
date
type-conversion
date-parsing
jslearner
quelle
quelle
Date -> String
oderString -> Date
?Antworten:
Das beste Zeichenfolgenformat für die Zeichenfolgenanalyse ist das Datums-ISO-Format zusammen mit dem JavaScript-Datumsobjektkonstruktor.
Beispiele für das ISO-Format:
YYYY-MM-DD
oderYYYY-MM-DDTHH:MM:SS
.Aber warte! Nur das "ISO-Format" zu verwenden, funktioniert von sich aus nicht zuverlässig. Zeichenfolgen werden manchmal als UTC und manchmal als Ortszeit analysiert (basierend auf dem Hersteller und der Version des Browsers). Die beste Vorgehensweise sollte immer darin bestehen, Daten als UTC zu speichern und Berechnungen als UTC durchzuführen.
Um ein Datum als UTC zu analysieren, fügen Sie ein Z hinzu - z
new Date('2011-04-11T10:20:30Z')
. B.: .Um ein Datum in UTC anzuzeigen, verwenden Sie
.toUTCString()
,um ein Datum in der Ortszeit des Benutzers anzuzeigen, verwenden Sie
.toString()
.Weitere Infos zu MDN | Datum und diese Antwort .
Aus Gründen der alten Internet Explorer-Kompatibilität (IE-Versionen unter 9 unterstützen das ISO-Format im Datumskonstruktor nicht) sollten Sie die Datetime-Zeichenfolgendarstellung in ihre Teile aufteilen und dann den Konstruktor mit Datetime-Teilen verwenden, z
new Date('2011', '04' - 1, '11', '11', '51', '00')
. Beachten Sie, dass die Nummer des Monats 1 weniger sein muss.Alternative Methode - Verwenden Sie eine geeignete Bibliothek:
Sie können auch die Bibliothek Moment.js nutzen , mit der das Datum mit der angegebenen Zeitzone analysiert werden kann.
quelle
new Date('2011-04-11T11:51:00')
das Erstellungsdatum gültig.new Date('1970-30-02')
ungültig, das Datum ist ungültig, da ein Jahr keine 30 Monate hat. Sie können keine Monate überlaufen lassen, aber wenn Sie Tage überlaufen, wird dies in Chrome und Firefox auf ein gültiges Datum aufgelöst:new Date('1970-02-30')
Dies ist der gleiche Tag wie das neue Datum ('1970-03-02').Leider habe ich das herausgefunden
gibt "Mi Apr 02 2014" zurück. Ich weiß, dass es verrückt klingt, aber es passiert für einige Benutzer.
Die kugelsichere Lösung ist die folgende:
quelle
yyyy-MM-dd
werden als UTC analysiert und toString gibt die Ortszeit zurück, sodass je nach Zeitzone des Benutzers definitiv unterschiedliche Ergebnisse zurückgegeben werden können. Wenn Sie immer die Zeit als UTC wünschen, sollten Sie toUTCString verwenden .Und die Ausgabe wird sein:
quelle
quelle
.indexOf()
Methode nicht, da sie ohne Polydateien nicht browserübergreifend kompatibel ist. Verwenden Sie stattdessen die kompatibleren.match()
oder.test()
Vanilla JS-Methoden.var _delimiter = _format.match(/\W/g)[0];
zu Beginn der Funktion hinzufügen, können Sie das Trennzeichen automatisch abrufen und den 3. Parameter vorab festlegen.moment.js ( http://momentjs.com/ ) ist ein vollständiges und gutes Paket für Verwendungsdaten und unterstützt ISO 8601-Zeichenfolgen .
Sie können ein Datum und ein Format für eine Zeichenfolge hinzufügen.
Und Sie können überprüfen, ob ein Datum gültig ist.
Einige Anzeigebeispiele
Siehe Dokumentation http://momentjs.com/docs/#/parsing/string-format/
quelle
let dt = moment("02-01-2019", "MM-DD-YYYY");console.log(dt.fromNow()+' | '+dt.format('LL'))
Ausgaben: "vor 3 Monaten | 1. Februar 2019"Übergeben Sie es als Argument an Date ():
Sie können auf Datum, Monat und Jahr zugreifen, indem Sie beispielsweise Folgendes verwenden :
dt.getMonth()
.quelle
console.log(new Date('30-08-2018'))
und bekomme ungültiges Datum01/02/2020
auf meinem Computer (in Großbritannien) mache, wird der 1. Februar zurückgegeben, und als ob in den USA dasselbe getan wird, wird der 2. Januar zurückgegeben. Sie sollten diese naive Implementierung so gut wie nie verwenden. Verwenden Sie stattdessen Moment .Wenn Sie die großartige Moment- Bibliothek verwenden können (z. B. in einem Node.js-Projekt), können Sie Ihr Datum einfach mit z
und kann über auf das JS-Datumsobjekt zugreifen
quelle
new Date(2000, 10, 1)
erhalten Sie "Mi Nov 01 2000 00:00:00 GMT + 0100 (CET)"Sehen Sie, dass 0 für Monat Ihnen Januar gibt
quelle
Für diejenigen, die nach einer winzigen und intelligenten Lösung suchen:
Beispiel:
quelle
Gerade
new Date(st);
Vorausgesetzt, es ist das richtige Format .
quelle
Wenn Sie aus dem Format "TT / MM / JJJJ" konvertieren möchten. Hier ist ein Beispiel:
Diese Lösung funktioniert in IE-Versionen unter 9.
quelle
Zeitstempel sollten in eine Zahl umgewandelt werden
quelle
undefined
Wert? Wie :var date = new Date(undefined)
?Date.parse
bringt dir fast was du willst. Es verschluckt sich amam
/pm
Teil, aber mit einigem Hacken können Sie es zum Laufen bringen:quelle
In das Format pt-BR konvertieren:
Ich hoffe jemandem zu helfen !!!
quelle
Ich habe eine Geige dafür erstellt. Sie können die Funktion toDate () für jede Datumszeichenfolge verwenden und das Datumsformat angeben. Dadurch erhalten Sie ein Datumsobjekt. https://jsfiddle.net/Sushil231088/q56yd0rp/
quelle
Für die Konvertierung von Zeichenfolgen in js verwende ich
http://momentjs.com/
quelle
Ich habe diese Funktion gemacht, um jedes Date-Objekt in ein UTC-Date-Objekt zu konvertieren.
quelle
Noch eine andere Möglichkeit:
quelle
Sie können dies versuchen:
quelle
oder
Datumszeichenfolge im Format '01 -01-1970 'funktioniert in FireFox nicht. Verwenden Sie daher besser "/" anstelle von "-" in der Datumsformatzeichenfolge.
quelle
Wenn Sie den Inhalt der Zeichenfolge überprüfen müssen, bevor Sie in das Datumsformat konvertieren:
quelle
Ich habe die Funktion parseDateTime erstellt, um die Zeichenfolge in ein Datumsobjekt zu konvertieren, und sie funktioniert in allen Browsern (einschließlich IE-Browser). Überprüfen Sie, ob jemand erforderlich ist, und verweisen Sie auf https://github.com/Umesh-Markande/Parse-String-to-Date -in-all-browser
quelle
Diese Antwort basiert auf Kassems Antwort, behandelt aber auch zweistellige Jahre. Ich habe Kassems Antwort bearbeitet, aber falls sie nicht genehmigt wurde, sende ich sie auch als separate Antwort.
quelle
Sie können Regex verwenden, um Zeichenfolgen auf die Detailzeit zu analysieren und dann ein Datum oder ein beliebiges Rückgabeformat wie das folgende zu erstellen:
quelle
Performance
Heute (2020.05.08) führe ich Tests für ausgewählte Lösungen durch - für zwei Fälle: Das Eingabedatum ist die ISO8601-Zeichenfolge (Anzeige, Bd, Cd, Dd, Ed) und das Eingabedatum ist der Zeitstempel (At, Ct, Dt). Die Lösungen Bd, Cd, Ct geben das js Date-Objekt nicht als Ergebnis zurück, aber ich füge sie hinzu, weil sie nützlich sein können, aber ich vergleiche sie nicht mit gültigen Lösungen. Diese Ergebnisse können für eine umfassende Datumsanalyse hilfreich sein.
Schlussfolgerungen
new Date
(Ad) ist 50-100x schneller als moment.js (Dd) für alle Browser für ISO-Datum und Zeitstempelnew Date
(Anzeige) ist ~ 10x schneller alsparseDate
(Ed)Date.parse
(Bd) ist am schnellsten, wenn in allen Browsern ein Zeitstempel vom ISO-Datum abgerufen werden mussEinzelheiten
Ich führe einen Test auf MacOs High Sierra 10.13.6 unter Chrome 81.0, Safari 13.1, Firefox 75.0 durch. Lösung
parseDate
(Ed) Verwendennew Date(0)
und manuelles Einstellen von UTC-Datumskomponenten.Code-Snippet anzeigen
Ergebnisse für Chrom
quelle
ISO 8601-ähnliche Datestrings, so hervorragend der Standard auch ist, werden immer noch nicht allgemein unterstützt.
Dies ist eine großartige Ressource, um herauszufinden, welches Datestring-Format Sie verwenden sollten:
http://dygraphs.com/date-formats.html
Ja, das bedeutet, dass Ihr Datenstring so einfach sein kann wie im Gegensatz zu
"2014/10/13 23:57:52"
anstatt"2014-10-13 23:57:52"
quelle
quelle
benutze diesen Code: (mein Problem wurde mit diesem Code gelöst)
}}
quelle
Ich habe eine wiederverwendbare Funktion geschrieben, die ich verwende, wenn ich Datumszeichenfolgen vom Server erhalte.
Sie können das gewünschte Trennzeichen (/ - etc ..) übergeben, das den Tag Monat und Jahr trennt, um die
split()
Methode zu verwenden.Sie können es an diesem Arbeitsbeispiel sehen und testen .
quelle
Eine weitere Möglichkeit besteht darin, eine Regex mit benannten Erfassungsgruppen über der Formatzeichenfolge zu erstellen und diese Regex dann zu verwenden, um Tag, Monat und Jahr aus der Datumszeichenfolge zu extrahieren:
quelle