Wie formatiere ich ein Datum in JavaScript?

Lesezeit: 10 Minuten

Benutzer-Avatar
leora

Wie formatiere ich a Date Objekt zu einer Zeichenfolge?

  • Wie üblich: Vorsicht, DER MONAT ist NULLINDEXIERT! Der Januar ist also null, nicht eins …

    – Christoph Roussy

    19. November 2015 um 12:45 Uhr


  • Passen Sie auch auf, myDate.getDay() gibt nicht den Wochentag zurück, sondern den Lage des Wochentags auf die Woche bezogen. myDate.getDate() gibt die zurück aktuellen Wochentag.

    – Jimenemex

    18. August 2017 um 19:47 Uhr

  • Sie können verwenden toLocaleDateString

    – onmyway133

    5. November 2018 um 13:50 Uhr

  • @onmyway kannst du eigentlich nicht. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…

    – ahnbizcad

    19. Januar 2019 um 4:34 Uhr

  • Informationen zum Parsen einer Zeichenfolge in ein Date-Objekt finden Sie unter Parsen einer Zeichenfolge in ein Datum in JavaScript.

    – Sebastian Simon

    27. September 2021 um 10:00 Uhr

Benutzer-Avatar
ajeet kanojia

Wenn Sie etwas weniger Kontrolle über die Formatierung benötigen als die derzeit akzeptierte Antwort, Date#toLocaleDateString kann verwendet werden, um standardmäßige Gebietsschema-spezifische Renderings zu erstellen. Das locale und options Mit Argumenten können Anwendungen die Sprache angeben, deren Formatierungskonventionen verwendet werden sollen, und eine gewisse Anpassung des Renderings ermöglichen.

Wichtige Beispiele für Optionen:

  1. Tag:

    Die Darstellung des Tages.
    Mögliche Werte sind “numerisch”, “2-stellig”.

  2. Wochentag:

    Die Darstellung des Wochentags.
    Mögliche Werte sind “schmal”, “kurz”, “lang”.

  3. Jahr:

    Die Darstellung des Jahres.
    Mögliche Werte sind “numerisch”, “2-stellig”.

  4. Monat:

    Die Darstellung des Monats.
    Mögliche Werte sind „numerisch“, „2-stellig“, „schmal“, „kurz“, „lang“.

  5. Stunde:

    Die Darstellung der Stunde.
    Mögliche Werte sind “numerisch”, “2-stellig”.

  6. Minute:
    Die Darstellung der Minute.
    Mögliche Werte sind “numerisch”, “2-stellig”.
  7. zweite:

    Die Darstellung des Zweiten.
    Mögliche Werte sind “numerisch”, 2-stellig”.

Alle diese Schlüssel sind optional. Sie können die Anzahl der Optionswerte basierend auf Ihren Anforderungen ändern, und dies spiegelt auch das Vorhandensein jedes Datums-Zeit-Begriffs wider.

Hinweis: Wenn Sie nur die Inhaltsoptionen konfigurieren, aber dennoch das aktuelle Gebietsschema verwenden möchten, übergeben Sie null für den ersten Parameter wird einen Fehler verursachen. Benutzen undefined stattdessen.

Für verschiedene Sprachen:

  1. “en-US”: Für Englisch
  2. “Hallo-IN”: Für Hindi
  3. “ja-JP”: Für Japanisch

Sie können weitere Sprachoptionen verwenden.

Zum Beispiel

var options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };
var today  = new Date();

console.log(today.toLocaleDateString("en-US")); // 9/17/2016
console.log(today.toLocaleDateString("en-US", options)); // Saturday, September 17, 2016
console.log(today.toLocaleDateString("hi-IN", options)); // शनिवार, 17 सितंबर 2016

Sie können auch die verwenden toLocaleString() Methode für den gleichen Zweck. Der einzige Unterschied besteht darin, dass diese Funktion die Zeit bereitstellt, in der Sie keine Optionen übergeben.

// Example
9/17/2016, 1:21:34 PM

Verweise:

  • diese sagt, es ist kein Standard, aber Mozilla gibt das nicht an

    – Pankaj Phartiyal

    16. November 2017 um 19:42 Uhr

  • Anscheinend sollte diese Antwort die beste “aktuelle” Antwort sein. Außerdem wurde die Option „hour12: true“ verwendet, um das 12-Stunden- vs. 24-Stunden-Format zu verwenden. Vielleicht sollte Ihre Zusammenfassungsliste in der Antwort hinzugefügt werden.

    – Doug Knudsen

    17. Dezember 2017 um 17:08 Uhr

  • @ Iarwa1n Diese Antwort wurde nicht erwähnt, aber Sie können toLocaleDateString verwenden, um nur bestimmte Teile zurückzugeben, denen Sie dann nach Belieben beitreten können. Überprüfen Sie meine Antwort unten. date.toLocaleDateString("en-US", { day: 'numeric' }) + "-"+ date.toLocaleDateString("en-US", { month: 'short' }) + "-" + date.toLocaleDateString("en-US", { year: 'numeric' }) sollte geben 16-Nov-2019

    – K Vij

    27. November 2019 um 20:33 Uhr


  • Es war eine lange Suche nach folgenden Links, aber ich habe herausgefunden, wo sie versteckt sind @MosesSchwartz: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…

    – btalb

    6. September 2020 um 7:42 Uhr

  • @KVij – das ist ein sehr ineffizienter Weg, um ein Datum zu formatieren, besonders wenn man bedenkt, dass es ein gibt formatToParts Methode die alle Teile in einem Array von Objekten zurückgibt.

    – RobG

    18. Dezember 2020 um 7:00 Uhr

Benutzer-Avatar
Markus

Für Datumsformate mit benutzerdefinierten Trennzeichen müssen Sie die Datums- (oder Uhrzeit-) Komponenten aus a herausziehen DateTimeFormat Objekt (das Teil der
ECMAScript-Internationalisierungs-API), und erstellen Sie dann manuell eine Zeichenfolge mit den gewünschten Trennzeichen.

Dazu können Sie verwenden DateTimeFormat#formatToParts. Sie könnten das Array destrukturieren, aber das ist nicht ideal, da die Array-Ausgabe vom Gebietsschema abhängt:

{ // example 1
   let f = new Intl.DateTimeFormat('en');
   let a = f.formatToParts();
   console.log(a);
}
{ // example 2
   let f = new Intl.DateTimeFormat('hi');
   let a = f.formatToParts();
   console.log(a);
}

Besser wäre es, ein Formatarray auf resultierende Strings abzubilden:

function join(t, a, s) {
   function format(m) {
      let f = new Intl.DateTimeFormat('en', m);
      return f.format
   }
   return a.map(format).join(s);
}

let a = [{day: 'numeric'}, {month: 'short'}, {year: 'numeric'}];
let s = join(new Date, a, '-');
console.log(s);

Sie können die Teile auch aus einem herausziehen DateTimeFormat einzeln verwenden
DateTimeFormat#formataber beachten Sie, dass es bei der Verwendung dieser Methode ab März 2020 einen Fehler in der ECMAScript-Implementierung gibt, wenn es um führende Nullen bei Minuten und Sekunden geht (dieser Fehler wird durch den obigen Ansatz umgangen).

let d = new Date(2010, 7, 5);
let ye = new Intl.DateTimeFormat('en', { year: 'numeric' }).format(d);
let mo = new Intl.DateTimeFormat('en', { month: 'short' }).format(d);
let da = new Intl.DateTimeFormat('en', { day: '2-digit' }).format(d);
console.log(`${da}-${mo}-${ye}`);

Bei der Arbeit mit Datum und Uhrzeit lohnt es sich meist, eine Bibliothek (z.
moment.js, Luxus) wegen der vielen verborgenen Komplexitäten des Fachgebiets.

Beachten Sie, dass die in den obigen Lösungen verwendete ECMAScript-Internationalisierungs-API nicht unterstützt wird im IE10 (0,03 % globaler Browser-Marktanteil im Februar 2020).

  • Sie können auch mit Nullen auffüllen .toString().padStart(2, '0')

    – Benny Jobigan

    15. Januar 2019 um 10:30 Uhr

  • @BennyJobigan Das sollte erwähnt werden String.padStart() ist nur ab ECMAScript 2017 verfügbar.

    – JHH

    17. Mai 2019 um 11:33 Uhr

Benutzer-Avatar
Teocci

Nun, was ich wollte, war, das heutige Datum in a umzuwandeln MySQL freundlicher Datumsstring wie 2012-06-23, und diese Zeichenfolge als Parameter in einer meiner Abfragen zu verwenden. Die einfache Lösung, die ich gefunden habe, ist diese:

var today = new Date().toISOString().slice(0, 10);

Denken Sie daran, dass die obige Lösung dies tut nicht berücksichtigen Sie Ihre Zeitzone versetzt.

Sie können stattdessen diese Funktion verwenden:

function toJSONLocal (date) {
    var local = new Date(date);
    local.setMinutes(date.getMinutes() - date.getTimezoneOffset());
    return local.toJSON().slice(0, 10);
}

Dadurch erhalten Sie das korrekte Datum, falls Sie diesen Code am Anfang/Ende des Tages ausführen.

var date = new Date();

function toLocal(date) {
  var local = new Date(date);
  local.setMinutes(date.getMinutes() - date.getTimezoneOffset());
  return local.toJSON();
}

function toJSONLocal(date) {
  var local = new Date(date);
  local.setMinutes(date.getMinutes() - date.getTimezoneOffset());
  return local.toJSON().slice(0, 10);
}

// check out your devtools console
console.log(date.toJSON());
console.log(date.toISOString());
console.log(toLocal(date));

console.log(toJSONLocal(date));

Benutzer-Avatar
ino

Benutzerdefinierte Formatierungsfunktion:

Bei festen Formaten erledigt eine einfache Funktion den Job. Das folgende Beispiel generiert das internationale Format YYYY-MM-DD:

function dateToYMD(date) {
    var d = date.getDate();
    var m = date.getMonth() + 1; //Month from 0 to 11
    var y = date.getFullYear();
    return '' + y + '-' + (m<=9 ? '0' + m : m) + '-' + (d <= 9 ? '0' + d : d);
}

console.log(dateToYMD(new Date(2017,10,5))); // Nov 5

Das OP-Format kann wie folgt generiert werden:

function dateToYMD(date) {
    var strArray=['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
    var d = date.getDate();
    var m = strArray[date.getMonth()];
    var y = date.getFullYear();
    return '' + (d <= 9 ? '0' + d : d) + '-' + m + '-' + y;
}
console.log(dateToYMD(new Date(2017,10,5))); // Nov 5

Hinweis: Es ist jedoch in der Regel nicht sinnvoll, die JavaScript-Standardbibliotheken zu erweitern (z. B. indem der Prototyp von Date um diese Funktion erweitert wird).

Eine fortgeschrittenere Funktion könnte eine konfigurierbare Ausgabe basierend auf einem Formatparameter erzeugen.

Wenn das Schreiben einer Formatierungsfunktion zu lang ist, gibt es viele Bibliotheken, die dies tun. Einige andere Antworten zählen sie bereits auf. Aber zunehmende Abhängigkeiten haben auch ihr Gegenstück.

Standard-ECMAScript-Formatierungsfunktionen:

Seit neueren Versionen von ECMAScript, der Date Klasse hat einige spezifische Formatierungsfunktionen:

toDateString: Abhängig von der Implementierung, nur das Datum anzeigen.

https://262.ecma-international.org/#sec-date.prototype.todatestring

new Date().toDateString(); // e.g. "Fri Nov 11 2016"

toISOString: Datum und Uhrzeit nach ISO 8601 anzeigen.

https://262.ecma-international.org/#sec-date.prototype.toisostring

new Date().toISOString(); // e.g. "2016-11-21T08:00:00.000Z"

zu JSON: Stringifier für JSON.

https://262.ecma-international.org/#sec-date.prototype.tojson

new Date().toJSON(); // e.g. "2016-11-21T08:00:00.000Z"

toLocaleDateString: Abhängig von der Implementierung, ein Datum im Gebietsschemaformat.

https://262.ecma-international.org/#sec-date.prototype.tolocaledatestring

new Date().toLocaleDateString(); // e.g. "21/11/2016"

toLocaleString: Abhängig von der Implementierung, ein Datum und eine Uhrzeit im Gebietsschemaformat.

https://262.ecma-international.org/#sec-date.prototype.tolocalestring

new Date().toLocaleString(); // e.g. "21/11/2016, 08:00:00 AM"

toLocaleTimeString: Abhängig von der Implementierung, eine Zeit im Gebietsschemaformat.

https://262.ecma-international.org/#sec-date.prototype.tolocaletimestring

new Date().toLocaleTimeString(); // e.g. "08:00:00 AM"

toString: Generischer toString für Datum.

https://262.ecma-international.org/#sec-date.prototype.tostring

new Date().toString(); // e.g. "Fri Nov 21 2016 08:00:00 GMT+0100 (W. Europe Standard Time)"

Hinweis: Es ist möglich, aus diesen Formatierungen eine benutzerdefinierte Ausgabe zu generieren >

new Date().toISOString().slice(0,10); //return YYYY-MM-DD

Beispielschnipsel:

console.log("1) "+  new Date().toDateString());
console.log("2) "+  new Date().toISOString());
console.log("3) "+  new Date().toJSON());
console.log("4) "+  new Date().toLocaleDateString());
console.log("5) "+  new Date().toLocaleString());
console.log("6) "+  new Date().toLocaleTimeString());
console.log("7) "+  new Date().toString());
console.log("8) "+  new Date().toISOString().slice(0,10));

Festlegen des Gebietsschemas für Standardfunktionen:

Einige der oben aufgeführten Standardfunktionen sind abhängig vom Gebietsschema:

  • toLocaleDateString()
  • toLocaleTimeString()
  • toLocalString()

Dies liegt daran, dass verschiedene Kulturen unterschiedliche Formate verwenden und ihr Datum oder ihre Uhrzeit auf unterschiedliche Weise ausdrücken. Die Funktion gibt standardmäßig das Format zurück, das auf dem Gerät konfiguriert ist, auf dem sie ausgeführt wird, aber dies kann durch Festlegen der Argumente (ECMA-402) angegeben werden.

toLocaleDateString([locales[, options]])
toLocaleTimeString([locales[, options]])
toLocaleString([locales[, options]])
//e.g. toLocaleDateString('ko-KR');

Das option Der zweite Parameter ermöglicht die Konfiguration eines spezifischeren Formats innerhalb des ausgewählten Gebietsschemas. Beispielsweise kann der Monat als Volltext oder als Abkürzung angezeigt werden.

toLocaleString('en-GB', { month: 'short' })
toLocaleString('en-GB', { month: 'long' })

Beispielschnipsel:

console.log("1) "+  new Date().toLocaleString('en-US'));
console.log("2) "+  new Date().toLocaleString('ko-KR'));
console.log("3) "+  new Date().toLocaleString('de-CH'));

console.log("4) "+  new Date().toLocaleString('en-GB', { hour12: false }));
console.log("5) "+  new Date().toLocaleString('en-GB', { hour12: true }));

Einige gute Praktiken in Bezug auf Gebietsschemata:

  • Die meisten Leute mögen es nicht, wenn ihre Daten in einem ausländischen Format angezeigt werden. Behalten Sie daher nach Möglichkeit das Standardgebietsschema bei (stellen Sie nicht überall „en-US“ ein).
  • Die Implementierung der Konvertierung von/nach UTC kann schwierig sein (unter Berücksichtigung von DST, Zeitzone, die kein Vielfaches von 1 Stunde ist usw.). Verwenden Sie nach Möglichkeit eine gut getestete Bibliothek.
  • Gehen Sie nicht davon aus, dass das Gebietsschema mit einem Land korreliert: Mehrere Länder haben viele davon (Kanada, Indien usw.)
  • Vermeiden Sie es, das Gebietsschema auf nicht standardmäßige Weise zu erkennen. Hier können Sie über die zahlreichen Fallstricke lesen: Erkennen des Tastaturlayouts, Erkennen des Gebietsschemas anhand des geografischen Standorts usw.

  • Ich denke, das Gebietsschema sollte für die britischen Beispiele “en-GB” sein, um das Format “tt/mm/jjjj” zu erhalten

    – Kane Morgan

    8. Februar 2021 um 16:13 Uhr

  • Ich habe das behoben. Danke

    – Adrian Maire

    8. Februar 2021 um 16:56 Uhr

  • Schön aufgelistet die unterstützten Parameter von Intl.DateTimeFormat() constructor sind hier aufgelistet: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…

    – ino

    25. März 2021 um 7:39 Uhr

  • vielen Dank, dass Sie mit Beispielen beginnen, bei denen “ECMA vodoo” nicht verwendet wird.

    – Gerfried

    26. April 2021 um 17:09 Uhr

  • .toJSON() Verwendet .toIsoString() Unter der Motorhaube (lt Dokumente). Und man muss sich bewusst sein dass ISO-Konvertierungen in eine andere Zeitzone konvertieren, was den Datumsteil ändern kann (siehe andere Kommentare). Außerdem scheint das OP in ein Orakel (usw.) “Gebietsschema / Kultur” konvertieren zu wollen, nicht in ein menschliches …

    – frIT

    16. November 2021 um 14:25 Uhr

1005610cookie-checkWie formatiere ich ein Datum in JavaScript?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy