949 Stimmen

Parsing einer Zeichenkette zu einem Datum in JavaScript

Wie kann ich in JavaScript eine Zeichenkette in ein Datumsobjekt umwandeln?

var st = "date in some format"
var dt = new Date();

var dt_st = // st in Date format, same as dt.

1076voto

Pavel Hodek Punkte 13499

Das beste String-Format für das Parsen von Strings ist das ISO-Datumsformat in Verbindung mit dem JavaScript-Date-Objektkonstruktor.

Beispiele für das ISO-Format: YYYY-MM-DD ou YYYY-MM-DDTHH:MM:SS .

Doch halt! Die Verwendung des "ISO-Formats" allein funktioniert nicht zuverlässig. Zeichenfolgen werden manchmal als UTC und manchmal als Ortszeit geparst (je nach Browserhersteller und -version). Die beste Praxis sollte immer sein, Daten als UTC zu speichern und Berechnungen als UTC durchzuführen.

Um ein Datum als UTC zu parsen, fügen Sie ein Z - z.B.: new Date('2011-04-11T10:20:30Z') .

Um ein Datum in UTC anzuzeigen, verwenden Sie .toUTCString() ,
um ein Datum in der Ortszeit des Benutzers anzuzeigen, verwenden Sie .toString() .

Mehr Informationen über MDN | Datum y diese Antwort .

Um die Kompatibilität mit dem alten Internet Explorer zu gewährleisten (IE-Versionen kleiner als 9 unterstützen das ISO-Format im Date-Konstruktor nicht), sollten Sie die Datetime-String-Darstellung in ihre Bestandteile zerlegen und dann den Konstruktor mit den Datetime-Teilen verwenden, z. B: new Date('2011', '04' - 1, '11', '11', '51', '00') . Beachten Sie, dass die Zahl des Monats um 1 kleiner sein muss.


Alternative Methode: Verwendung einer geeigneten Bibliothek:

Sie können auch die Vorteile der Bibliothek nutzen Moment.js die das Parsen von Daten mit der angegebenen Zeitzone ermöglicht.

443voto

Roman Podlinov Punkte 21233

Leider musste ich feststellen, dass

var mydate = new Date('2014-04-03');
console.log(mydate.toDateString());

gibt "Wed Apr 02 2014" zurück. Ich weiß, es hört sich verrückt an, aber es passiert bei einigen Benutzern.

El kugelsichere Lösung ist die folgende:

var parts ='2014-04-03'.split('-');
// Please pay attention to the month (parts[1]); JavaScript counts months from 0:
// January - 0, February - 1, etc.
var mydate = new Date(parts[0], parts[1] - 1, parts[2]); 
console.log(mydate.toDateString());

168voto

var st = "26.04.2013";
var pattern = /(\d{2})\.(\d{2})\.(\d{4})/;
var dt = new Date(st.replace(pattern,'$3-$2-$1'));

Und die Ausgabe wird sein:

dt => Date {Fri Apr 26 2013}

94voto

Kassem Punkte 1129
function stringToDate(_date,_format,_delimiter)
{
            var formatLowerCase=_format.toLowerCase();
            var formatItems=formatLowerCase.split(_delimiter);
            var dateItems=_date.split(_delimiter);
            var monthIndex=formatItems.indexOf("mm");
            var dayIndex=formatItems.indexOf("dd");
            var yearIndex=formatItems.indexOf("yyyy");
            var month=parseInt(dateItems[monthIndex]);
            month-=1;
            var formatedDate = new Date(dateItems[yearIndex],month,dateItems[dayIndex]);
            return formatedDate;
}

stringToDate("17/9/2014","dd/MM/yyyy","/");
stringToDate("9/17/2014","mm/dd/yyyy","/")
stringToDate("9-17-2014","mm-dd-yyyy","-")

52voto

Juan Caicedo Punkte 1265

Empfehlung: Ich empfehle, ein Paket für Daten zu verwenden, das viele Formate enthält, da die Verwaltung von Zeitzonen und Zeitformaten wirklich ein großes Problem ist, und Moment Js löst viele Formate. Sie könnten leicht Datum von einem einfachen String zu Datum parsen, aber ich denke, das ist eine harte Arbeit, alle Formate und Variationen von Daten zu unterstützen.

Aktualisierung: Moment ist jetzt veraltet Eine gute Alternative für den Moment ist datefns https://date-fns.org/


moment.js ( http://momentjs.com/ ) ist ein komplettes und gutes Paket für Nutzungsdaten und unterstützt ISO 8601 Zeichenfolgen .

Sie können eine Zeichenkette Datum und Format hinzufügen.

moment("12-25-1995", "MM-DD-YYYY");

Und Sie könnten prüfen, ob ein Datum gültig ist.

moment("not a real date").isValid(); //Returns false

Einige Beispiele anzeigen

let dt = moment("02-01-2019", "MM-DD-YYYY");
console.log(dt.fromNow()+' |'+dt.format('LL')) 
// output: "3 months ago | February 1, 2019"

Siehe Dokumentation http://momentjs.com/docs/#/parsing/string-format/

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X