So formatieren Sie ein JavaScript-Datum

Lesezeit: 9 Minuten

So formatieren Sie ein JavaScript Datum
leora

Wie kann ich in JavaScript ein Datumsobjekt so formatieren, dass es gedruckt wird? 10-Aug-2010?

  • 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

1646894111 928 So formatieren Sie ein JavaScript Datum
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).

  • Oder verlängern Sie die Date Objekt, wie ich es bei stackoverflow.com/questions/3187790/… getan habe

    – Marcel Korpel

    23. August 2010 um 23:41 Uhr

  • ich verstehe das ye ist Jahr, mo ist Monat und da ist Tag. Was ist o? Was ist a? Was ist m? Könnten Sie bitte die richtigen Variablennamen verwenden?

    – Mikemaccana

    19. Januar 2021 um 20:41 Uhr


  • im Jahr 2021, sagen Momentjs-Dokumente Wir möchten davon abraten, Moment in neuen Projekten zu verwenden

    – Schamasen

    13. Juli 2021 um 14:47 Uhr

  • 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

So formatieren Sie ein JavaScript Datum
Robert Pitt

Verwenden Sie die date.format-Bibliothek:

var dateFormat = require('dateformat');
var now = new Date();
dateFormat(now, "dddd, mmmm dS, yyyy, h:MM:ss TT");

kehrt zurück:

Saturday, June 9th, 2007, 5:46:21 PM 

Datumsformat auf npm

http://jsfiddle.net/phZr7/1/

  • Sein Code für „L“ für Cantiseconds ist falsch, er sollte „L > 99 ?“ entfernen. Teil … Ansonsten ist es ziemlich ordentlich, wenn auch nicht allzu gut lokalisierbar.

    – Benutzer2451227

    22. April 2014 um 11:29 Uhr


  • Diese Lösung ist auch als npm-Paket verfügbar: npmjs.com/package/dateformat

    – David

    21. Oktober 2015 um 15:29 Uhr

  • Wenn Sie sich die Mühe machen, eine externe Abhängigkeit zu importieren, würde ich die Verwendung von moment.js empfehlen. Es kann diese Art der Datumsformatierung durchführen: momentjs.com/docs/#/displaying Und es hat viel mehr Funktionen.

    – Zeichnete Dara-Abrams

    6. Juli 2018 um 21:31 Uhr

  • timezone funktioniert auch gut für dateformat im Vergleich zu Datums-API im IE

    – Sandeep Kumar

    29. August 2018 um 22:19 Uhr


1646894111 667 So formatieren Sie ein JavaScript Datum
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));

  • Sein Code für „L“ für Cantiseconds ist falsch, er sollte „L > 99 ?“ entfernen. Teil … Ansonsten ist es ziemlich ordentlich, wenn auch nicht allzu gut lokalisierbar.

    – Benutzer2451227

    22. April 2014 um 11:29 Uhr


  • Diese Lösung ist auch als npm-Paket verfügbar: npmjs.com/package/dateformat

    – David

    21. Oktober 2015 um 15:29 Uhr

  • Wenn Sie sich die Mühe machen, eine externe Abhängigkeit zu importieren, würde ich die Verwendung von moment.js empfehlen. Es kann diese Art der Datumsformatierung durchführen: momentjs.com/docs/#/displaying Und es hat viel mehr Funktionen.

    – Zeichnete Dara-Abrams

    6. Juli 2018 um 21:31 Uhr

  • timezone funktioniert auch gut für dateformat im Vergleich zu Datums-API im IE

    – Sandeep Kumar

    29. August 2018 um 22:19 Uhr


1646894112 51 So formatieren Sie ein JavaScript Datum
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');

Die 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

986660cookie-checkSo formatieren Sie ein JavaScript-Datum

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

Privacy policy