Wie kann ich in JavaScript ein Datumsobjekt so formatieren, dass es gedruckt wird? 10-Aug-2010
?
So formatieren Sie ein JavaScript-Datum
leora
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#format
aber 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 undda
ist Tag. Was isto
? Was ista
? Was istm
? 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
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
-
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
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
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
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