So formatieren Sie ein JavaScript-Datum

2220

Wie kann ich in JavaScript ein Datumsobjekt formatieren, als das gedruckt werden soll 10-Aug-2010?

Leora
quelle
204
Wie immer: Vorsicht, DER MONAT IST NULL-INDEXIERT! Der Januar ist also null, nicht eins ...
Christophe Roussy
12
Beachten Sie auch, myDate.getDay()dass der Wochentag nicht zurückgegeben wird, sondern der Ort des Wochentags sich auf die Woche bezieht. myDate.getDate()Gibt den aktuellen Wochentag zurück .
Jimenemex
3
Verwenden Sie zum Formatieren von DateTimes in Javascript das Intl.DateTimeFormatObjekt. Ich beschreibe es in meinem Beitrag: Beitrag . Ich erstelle eine Online-Lösung für Ihre Antwort von Intl.DateTimeFormat Check Online
Iman Bahrampour
5
Sie können verwendentoLocaleDateString
onmyway133
12
Es hat so lange gedauert, bis Javascript die URL als standardisiertes Objekt erhalten hat. Hier können Sie einen Abfrageparameterschlüssel herausholen, das Protokoll abrufen, die Domäne der obersten Ebene abrufen usw. Sie können ES6 ES7 erstellen, aber immer noch nicht nur ein Standarddatum festlegen Zeitformatierer / Parser im Jahr 2019? Es ist, als ob sie denken "hmmm ja ... wer um alles in der Welt, der Javascript verwendet, müsste sich regelmäßig mit Zeiten und Daten auseinandersetzen ..."
ahnbizcad

Antworten:

1288

Bei benutzerdefinierten Datumsformaten müssen Sie die Datums- (oder Zeit-) Komponenten aus einem DateTimeFormatObjekt (das Teil der ECMAScript Internationalization API ist ) ziehen und anschließend manuell eine Zeichenfolge mit den gewünschten Trennzeichen erstellen.

Dazu können Sie Folgendes verwenden DateTimeFormat#formatToParts:

const date = new Date('2010-08-05')
const dateTimeFormat = new Intl.DateTimeFormat('en', { year: 'numeric', month: 'short', day: '2-digit' }) 
const [{ value: month },,{ value: day },,{ value: year }] = dateTimeFormat .formatToParts(date ) 

console.log(`${day}-${month}-${year }`)
console.log(`${day}👠${month}👢${year}`) // just for fun

Sie können die Teile eines DateTimeFormatnacheinander auch mit herausziehen. DateTimeFormat#formatBeachten Sie jedoch, dass bei Verwendung dieser Methode ab März 2020 ein Fehler in der ECMAScript-Implementierung vorliegt, wenn es darum geht, Nullen in Minuten und Sekunden zu führen (dieser Fehler) wird durch den obigen Ansatz umgangen).

const d = new Date('2010-08-05')
const ye = new Intl.DateTimeFormat('en', { year: 'numeric' }).format(d)
const mo = new Intl.DateTimeFormat('en', { month: 'short' }).format(d)
const da = new Intl.DateTimeFormat('en', { day: '2-digit' }).format(d)

console.log(`${da}-${mo}-${ye}`)

Wenn Sie mit Datums- und Uhrzeitangaben arbeiten , lohnt es sich normalerweise, eine Bibliothek (z. B. moment.js , luxon ) zu verwenden, da das Feld viele komplexe Komplexitäten aufweist.

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

Marko
quelle
369
Erwägen Sie wirklich, stattdessen eine Bibliothek wie Moment.js oder Date.js zu verwenden. Dieses Problem wurde mehrfach gelöst.
Benjamin Oakes
242
Warum fügen sie dazu keine Funktion in das DateObjekt ein?
Nayan
68
Ein wichtiger Punkt ist, dass die getMonth () -Methode einen auf 0 basierenden Monatsindex zurückgibt, so dass beispielsweise der Januar 0 zurückgibt. Der Februar gibt 1 zurück, usw.
Marko
628
moment.js 2.9.0 ist 11.6k gzipped, dieses Beispiel ist 211 bytes gzipped.
Mrzmyr
26
Es sollte beachtet werden, dass Sie niemals document.write () verwenden sollten. Riesige Sicherheits- und Leistungsprobleme.
Matt Jensen
2006

Wenn Sie etwas weniger Kontrolle über die Formatierung benötigen als die derzeit akzeptierte Antwort, Date#toLocaleDateStringkönnen Sie mit dieser Option standardmäßige länderspezifische Renderings erstellen. Die localeund optionsArgumente lassen Anwendungen , die die Sprache angeben , der Darstellungskonventionen verwendet werden soll, und eine gewisse Anpassung des Rendering ermöglichen.

Schlüsselbeispiele für Optionen:

  1. Tag:
    Die Darstellung des Tages.
    Mögliche Werte sind "numerisch", "zweistellig".
  2. Wochentag:
    Die Darstellung des Wochentags.
    Mögliche Werte sind "eng", "kurz", "lang".
  3. Jahr:
    Die Darstellung des Jahres.
    Mögliche Werte sind "numerisch", "zweistellig".
  4. Monat:
    Die Darstellung des Monats.
    Mögliche Werte sind "numerisch", "zweistellig", "schmal", "kurz", "lang".
  5. Stunde:
    Die Darstellung der Stunde.
    Mögliche Werte sind "numerisch", "zweistellig".
  6. Minute: Die Darstellung der Minute.
    Mögliche Werte sind "numerisch", "zweistellig".
  7. Sekunde:
    Die Darstellung der Sekunde.
    Mögliche Werte sind "numerisch", zweistellig ".

Alle diese Schlüssel sind optional. Sie können die Anzahl der Optionswerte basierend auf Ihren Anforderungen ändern. Dies spiegelt auch das Vorhandensein der einzelnen Datums- und Zeitangaben wider.

Hinweis: Wenn Sie nur die Inhaltsoptionen konfigurieren möchten, aber dennoch das aktuelle Gebietsschema verwenden möchten, führt nulldie Übergabe des ersten Parameters zu einem Fehler. Verwenden Sie undefinedstattdessen.

Für verschiedene Sprachen:

  1. "en-US": Für Englisch
  2. "hi-IN": Für Hindi
  3. "ja-JP": Für Japaner

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 die toLocaleString()Methode auch für denselben Zweck verwenden. Der einzige Unterschied besteht darin, dass diese Funktion die Zeit angibt, zu der Sie keine Optionen übergeben.

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

Verweise:

ajeet kanojia
quelle
45
War fast im Begriff, moment.jsfür ein einfaches Format zu verwenden. Glücklicherweise wurde eine zusätzliche Google-Suche durchgeführt und festgestellt, dass bereits eine native API dies tut. Eine externe Abhängigkeit wurde gespeichert. Genial!
LeOn - Han Li
21
Diese Antwort sollte anscheinend die beste "aktuelle" Antwort sein. Verwendete auch die Option "Stunde12: Wahr", um das 12-Stunden- oder 24-Stunden-Format zu verwenden. Vielleicht sollte in der Antwort zu Ihrer Zusammenfassungsliste hinzugefügt werden.
Doug Knudsen
14
Ich bekomme keine positiven Stimmen zu dieser Antwort. Es löst das Problem in der Frage nicht. (dh gib mir ein Datum, das wie der 10. August 2010 aussieht). Die Verwendung von toLocaleDateString () ist ziemlich schwierig. Die date.format Bibliothek scheint die bessere Lösung zu sein (zumindest für Node-Benutzer)
Iarwa1n
3
Wenn die Übergabe undefinedals erster Gebietsschemaparameter willkürlich ist, können Sie stattdessen den Wert übergeben "default", um die Gebietsschemaeinstellungen des Browsers gemäß den MDN-Dokumenten zu verwenden. Developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
wbharding
3
@ 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 geben16-Nov-2019
K Vij
609

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/

RobertPitt
quelle
4
Dies scheint die längere Lösung zu sein, aber komprimiert und auf einer Site verwendet, die Datumsangaben verwendet, wäre ein gutes Stück die bessere Lösung!
RobertPitt
5
Diese Lösung ist auch als npm-Paket erhältlich: npmjs.com/package/dateformat
David
19
Es gibt 14 offene Probleme mit dem obigen Plugin. Sogar ich habe einen gefunden :(
Amit Kumar Gupta
6
Ich bekommerequire is not defined
Hooli
16
OP bat um JS-Lösung
Luke Pring
523

Wenn Sie benötigen , um schnell Ihr Datumsformat Ebene JavaScript, Verwendung getDate, getMonth + 1, getFullYear, getHoursund getMinutes:

var d = new Date();

var datestring = d.getDate()  + "-" + (d.getMonth()+1) + "-" + d.getFullYear() + " " +
d.getHours() + ":" + d.getMinutes();

// 16-5-2015 9:50

Oder wenn es mit Nullen aufgefüllt werden muss:

var datestring = ("0" + d.getDate()).slice(-2) + "-" + ("0"+(d.getMonth()+1)).slice(-2) + "-" +
    d.getFullYear() + " " + ("0" + d.getHours()).slice(-2) + ":" + ("0" + d.getMinutes()).slice(-2);

// 16-05-2015 09:50
sebastian.i
quelle
Können Sie sagen, wie man ein Format wie Montag, 23. März 2018 erhält?
Sachin HR
@SachinHR, siehe vorherige Antwort: stackoverflow.com/a/34015511/4161032 . Sie toLocaleDateString()können das Datum mit lokalisierten Monats- / Tagesnamen formatieren.
sebastian.i
12
Sie können auch Nullen mit.toString().padStart(2, '0')
Benny Jobigan
1
@DmitryoN, falls erforderlich, kann das Jahr auf die gleiche Weise aufgefüllt werden:("000" + d.getFullYear()).slice(-4)
sebastian.i
4
@BennyJobigan Es sollte erwähnt werden, dass String.padStart()nur von ECMAScript 2017 verfügbar ist.
JHH
413

Nun, ich wollte das heutige Datum in eine MySQL- freundliche Datumszeichenfolge wie den 23.06.2012 konvertieren und diese Zeichenfolge als Parameter in einer meiner Abfragen verwenden. Die einfache Lösung, die ich gefunden habe, ist folgende:

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

Beachten Sie, dass die obige Lösung Ihren Zeitzonenversatz nicht berücksichtigt.

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);
}

Dies gibt Ihnen das richtige Datum, falls Sie diesen Code am Anfang / Ende des Tages ausführen.

simo
quelle
9
Sie können new Date(date + " UTC")die Zeitzone austricksen und die setMinutes-Zeile entfernen. Mann, Javascript ist schmutzig
Vajk Hermecz
23
Y10K kompatible Version: var today = new Date().toISOString().slice(0,-14):)
Alex Shaffer
22
Oder sonew Date().toISOString().split('T')[0]
Rofrol
4
new Date().toISOString().slice(0, 16).replace('T',' ')Zeit
einzuschließen
3
Nur zu kommentieren, dass der Mangel an Zeitzone keine kleine Unannehmlichkeit "am Anfang / Ende des Tages" ist. In Australien zum Beispiel kann das Datum bis etwa 11 Uhr falsch sein - fast den halben Tag!
Steve Bennett
230

Benutzerdefinierte Formatierungsfunktion:

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

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 normalerweise keine gute Idee, die JavaScript-Standardbibliotheken zu erweitern (z. B. durch Hinzufügen dieser Funktion zum Prototyp von Date).

Eine erweiterte Funktion könnte eine konfigurierbare Ausgabe basierend auf einem Formatparameter generieren.

Wenn das Schreiben einer Formatierungsfunktion zu lang ist, gibt es viele Bibliotheken, in denen dies möglich ist. Einige andere Antworten führen sie bereits auf. Zunehmende Abhängigkeiten haben aber auch ein Gegenstück.

Standardfunktionen zur ECMAScript-Formatierung:

Seit neueren Versionen von ECMAScript verfügt die DateKlasse über einige spezifische Formatierungsfunktionen:

toDateString : Implementierungsabhängig, nur das Datum anzeigen .

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.todatestring

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

toISOString : Datum und Uhrzeit von ISO 8601 anzeigen .

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.toisostring

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

toJSON : Stringifier für JSON.

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tojson

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

toLocaleDateString : Implementierungsabhängig, ein Datum im Gebietsschemaformat.

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tolocaledatestring

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

toLocaleString : Implementierungsabhängig, Datum und Uhrzeit im Gebietsschemaformat.

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tolocalestring

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

toLocaleTimeString : Implementierungsabhängig, eine Zeit im Gebietsschemaformat.

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tolocaletimestring

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

toString : Generischer toString für Datum.

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tostring

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

Hinweis: Aus diesen Formatierungen kann eine benutzerdefinierte Ausgabe generiert werden>

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

Beispiele für Ausschnitte:

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));

Adrian Maire
quelle
3
Vielen Dank für den letzten. Nützlich zum Festlegen des Datumswerts von HTML-Datumseingaben.
daCoda
new Date().toLocaleDateString()gibt dir bitte mm/dd/yyyynicht das dd/mm/yyyykorrigieren.
Aarvy
1
@RajanVerma: toLocaleDateString gibt Ihr Gebietsschema an, das wahrscheinlich MM / TT / JJJJ ist, weil Sie sich in den USA befinden. Hier ist das Gebietsschema für Datum TT / MM / JJJJ (das ist genau der Punkt von "Gebietsschema"). Ich habe "zB" geschrieben, weil es nicht die Spezifikation ist, sondern ein Beispiel für die Ausgabe.
Adrian Maire
177

Wenn Sie in Ihrem Projekt bereits die jQuery-Benutzeroberfläche verwenden, können Sie dies folgendermaßen tun:

var formatted = $.datepicker.formatDate("M d, yy", new Date("2014-07-08T09:02:21.377"));

// formatted will be 'Jul 8, 2014'

Einige Datumsauswahl-Datumsformatoptionen zum Spielen sind hier verfügbar .

Dmitry Pavlov
quelle
13
Wie gesagt - wenn jQueryUI bereits im Projekt verwendet wird - warum nicht die Datepicker-Datumsformatierungsfunktion wiederverwenden? Hey Leute, ich verstehe nicht, warum ich negativ über meine Antwort abstimme. Bitte erkläre.
Dmitry Pavlov
7
Dies kann daran liegen, dass jemand die jQuery-Benutzeroberfläche nur für die Datumsformatfunktion einbindet, oder daran, dass der Datepicker ein optionaler Teil der Bibliothek ist, aber wahrscheinlich daran, dass es in Mode ist, jQuery zu hassen.
Sennett
12
Ich denke nicht, dass es möglich ist, alle seltsamen Entscheidungen, die jemand versehentlich oder ohne Sinneswahrnehmung treffen könnte, vollständig zu vermeiden.
Dmitry Pavlov
7
@sennett: JQuery zu hassen ist in Mode? Ich nehme an, Sie laufen mit Ihrer Hose auf halber Höhe der Beine herum. So war der Versuch, ohne jQuery zu codieren, für den größten Teil der Geschichte von JavaScript so ziemlich ...
Michael Scheper
5
In jedem Fall ist dies eine hilfreiche und völlig vernünftige Antwort. Auch hier verwenden 70% der Websites jQuery. Es sollte nicht wegen der religiösen Überzeugungen der Entwickler herabgestuft werden.
Michael Scheper
133

Ich denke, Sie können einfach die nicht standardmäßige Datumsmethode verwendentoLocaleFormat(formatString)

formatString: Eine Formatzeichenfolge im gleichen Format, die von der strftime()Funktion in C erwartet wird .

var today = new Date();
today.toLocaleFormat('%d-%b-%Y'); // 30-Dec-2011

Verweise:

Sébastien
quelle
160
toLocaleFormat () scheint nur in Firefox zu funktionieren. Sowohl IE als auch Chrome versagen für mich.
Fitzgeraldsteele
16
Chrome verfügt über die Methode .toLocaleString ('en'). Wie es scheint, unterstützt ein neuer Browser diesen Entwickler.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
apocalypz
8
Lesen Sie die Warnung hier: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Carson Reinke
6
Dies wäre die beste Lösung, wenn jeder sie implementieren könnte. verdammt du dh / chrome
santa
6
@ Santa: In der Tat. Vielleicht gab es einen guten Grund, Mozillas Vorbild nicht zu folgen, aber die Tatsache, dass selbst ES6 keine Standardfunktion dafür hat, zeigt, dass es immer noch eine Hackersprache ist, keine Entwicklersprache.
Michael Scheper
105

Normales JavaScript ist die beste Wahl für kleine Onetimer.

Auf der anderen Seite ist MomentJS eine großartige Lösung , wenn Sie mehr Daten benötigen .

Zum Beispiel:

moment().format('YYYY-MM-DD HH:m:s');     // now() -> 2015-03-24 14:32:20
moment("20111031", "YYYYMMDD").fromNow(); // 3 years ago
moment("20120620", "YYYYMMDD").fromNow(); // 3 years ago
moment().startOf('day').fromNow();        // 11 hours ago
moment().endOf('day').fromNow();          // in 13 hours
Milbe Mitreski
quelle
2
Wichtig zu erwähnen: Nicht verwenden, es YYYYsei denn, Sie kennen den Unterschied zwischen YYYYund yyyy: stackoverflow.com/questions/15133549/…
Domin
@Domin, das spezifisch für NSDateFormatter in iOS ist, wie es beispielsweise von Objective-C oder Swift verwendet wird. Diese Frage bezieht sich auf Javascript im Browser, und diese Antwort verwendet MomentJS, wobei YYYY(nicht yyyy) das Standardjahr und GGGG(nicht YYYY) das ISO-Wochenjahr ist.
Mark Reed
2
Moment ist 100% nicht veraltet @Gerry
Liam
97

In modernen Browsern (*) können Sie dies einfach tun:

var today = new Date().toLocaleDateString('en-GB', {
    day : 'numeric',
    month : 'short',
    year : 'numeric'
}).split(' ').join('-');

Ausgabe bei heutiger Ausführung (24. Januar 2016):

'24-Jan-2016'

(*) Laut MDN bedeutet "moderne Browser" die nächtliche Erstellung von Chrome 24+, Firefox 29+, Internet Explorer 11, Edge 12+, Opera 15+ und Safari .

John Slegers
quelle
Gibt es eine Möglichkeit zu überprüfen, ob diese Funktion unterstützt wird, und wenn nicht, standardmäßig eine einfachere Lösung zu verwenden?
James Wierzba
@ JamesWierzba: Du könntest diese Polyfüllung verwenden !
John Slegers
Dies ist nicht einmal auf caniuse.com aufgeführt: /
Charles Wood
51

Sie sollten sich date.js ansehen . Es werden viele praktische Helfer für die Arbeit mit Daten hinzugefügt, zum Beispiel in Ihrem Fall:

var date = Date.parse('2010-08-10');
console.log(date.toString('dd-MMM-yyyy'));

Erste Schritte: http://www.datejs.com/2007/11/27/getting-started-with-datejs/

NiKo
quelle
Vielen Dank. Dies ist eine sehr umfassende und vollständige Bibliothek mit geringem Platzbedarf.
Mitcheljh
Ich denke, derzeit erhalte ich eine Nummer von Date.parse, während let date = new Date (fromString) mehr Funktionen hat. Leider scheint toString zu meiner Überraschung auch nur einen Standard anzuzeigen, ohne das übergebene Argument für die Formatierung zu interpretieren. Die Verwendung von NodeJS 11+ toDateString ist eine kürzere Ausgabe, erfordert jedoch keine Formatierung. Alles was ich sehe ist ein sehr komplizierter toLocaleDateString
Master James
38

Ich kann Ihr gewünschtes Format in einer Zeile ohne Bibliotheken und ohne Datumsmethoden erhalten, nur Regex:

var d = (new Date()).toString().replace(/\S+\s(\S+)\s(\d+)\s(\d+)\s.*/,'$2-$1-$3');
// date will be formatted as "14-Oct-2015" (pass any date object in place of 'new Date()')

In meinen Tests funktioniert dies zuverlässig in den wichtigsten Browsern (Chrome, Safari, Firefox und IE). Wie @RobG hervorhob, ist die Ausgabe von Date.prototype.toString () implementierungsabhängig. Testen Sie also einfach die Ausgabe, um sicherzugehen Es funktioniert direkt in Ihrer JavaScript-Engine. Sie können sogar Code hinzufügen, um die Zeichenfolgenausgabe zu testen und sicherzustellen, dass sie Ihren Erwartungen entspricht, bevor Sie den regulären Ausdruck ersetzen.

JD Smith
quelle
console.log(new Date().toString().replace(/\S+\s(\S+)\s(\d+)\s(\d+)\s.*/,'$2-$1-$3'));
John
@ André - ich stimme zu. Wenn dies mein Code wäre, würde ich mit Sicherheit einen Kommentar hinzufügen, der den regulären Ausdruck erklärt und ein Beispiel für die Eingabe und die entsprechende Ausgabe gibt.
JD Smith
Wie wäre es mit Zeitteil (HH: mm: ss)?
unruledboy
@unruledboy var d = (neues Datum ()). toString (). Ersetzen (/ \ S + \ s (\ S +) \ s (\ d +) \ s (\ d +) \ s (\ S +) \ s. * / , '$ 2- $ 1- $ 3 $ 4'); - oder um nur den Zeitteil ohne das Datum selbst zu erhalten, verwenden Sie: var d = (neues Datum ()). toString (). Ersetzen Sie (/ \ S + \ s (\ S +) \ s (\ d +) \ s (\ d +) \ s (\ S +) \ s. * /, '$ 4');
JD Smith
37

@ Sébastien - Alternative alle Browser-Unterstützung

new Date(parseInt(496407600)*1000).toLocaleDateString('de-DE', {
year: 'numeric',
month: '2-digit',
day: '2-digit'
}).replace(/\./g, '/');

Dokumentation: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString

user956584
quelle
5
Anstatt .replace () auszuführen, können Sie einfach 'en-GB' als Gebietsschema verwenden. :)
Roberto14
1
Das ist wirklich schön, zB new Date().toLocaleDateString("en-EN", {month: "short", weekday: "short", day: "2-digit", year: "numeric"})kehrt zurück"Wed, Sep 06, 2017"
Peter T.
37

OK , wir haben etwas namens Intl, das heutzutage sehr nützlich ist, um ein Datum in JavaScript zu formatieren:

Ihr Datum wie folgt:

var date = '10/8/2010';

Und Sie wechseln zu Datum, indem Sie neues Datum () wie folgt verwenden:

date = new Date(date);

Und jetzt können Sie es nach Belieben formatieren, indem Sie eine Liste von Gebietsschemas wie folgt verwenden:

date = new Intl.DateTimeFormat('en-AU').format(date); // Australian date format: "8/10/2010" 


date = new Intl.DateTimeFormat('en-US').format(date); // USA date format: "10/8/2010" 


date = new Intl.DateTimeFormat('ar-EG').format(date);  // Arabic date format: "٨‏/١٠‏/٢٠١٠"

Wenn Sie genau das oben erwähnte Format möchten, können Sie Folgendes tun:

date = new Date(Date.UTC(2010, 7, 10, 0, 0, 0));
var options = {year: "numeric", month: "short", day: "numeric"};
date = new Intl.DateTimeFormat("en-AU", options).format(date).replace(/\s/g, '-');

Und das Ergebnis wird sein:

"10-Aug-2010"

Weitere Informationen finden Sie in der Dokumentation zu Intl API und Intl.DateTimeFormat .

Alireza
quelle
Nicht unterstützt von IE
Pants
Es ist aber nur von IE11, IE10- waren aus dem Leben, bevor dies existierte, so dass es verständlich ist. 92% von caniuse, was ziemlich gut ist caniuse.com/#search=datetimeformat
Tofandel
32

Verwenden einer Zeichenfolgenvorlage für ECMAScript Edition 6 (ES6 / ES2015):

let d = new Date();
let formatted = `${d.getFullYear()}-${d.getMonth() + 1}-${d.getDate()}`;

Wenn Sie die Trennzeichen ändern müssen:

const delimiter = '/';
let formatted = [d.getFullYear(), d.getMonth() + 1, d.getDate()].join(delimiter);
vdegenne
quelle
30

Verpackte Lösung: Luxon

Wenn Sie eine Lösung für alle verwenden möchten, empfehle ich dringend die Verwendung von Luxon (einer modernisierten Version von Moment.js ), das auch in vielen Gebietsschemas / Sprachen und vielen anderen Funktionen formatiert.

Luxon wird auf der Moment.js-Website gehostet und von einem Moment.js-Entwickler entwickelt, da Moment.js Einschränkungen aufweist, die der Entwickler ansprechen wollte, aber nicht konnte.

Installieren:

npm install luxonoder yarn add luxon(Link für andere Installationsmethoden besuchen)

Beispiel:

luxon.DateTime.fromISO('2010-08-10').toFormat('yyyy-LLL-dd');

Ausbeuten:

10.08.2010

Manuelle Lösung

Mit ähnlichen Formatierungen wie Moment.js, Class DateTimeFormatter (Java) und Class SimpleDateFormat (Java) habe ich eine umfassende Lösung implementiert, formatDate(date, patternStr)bei der der Code leicht zu lesen und zu ändern ist. Sie können Datum, Uhrzeit, AM / PM usw. anzeigen. Weitere Beispiele finden Sie im Code.

Beispiel:

formatDate(new Date(), 'EEEE, MMMM d, yyyy HH:mm:ss:S')

( formatDateist im folgenden Code-Snippet implementiert)

Ausbeuten:

Freitag, 12. Oktober 2018 18: 11: 23: 445

Probieren Sie den Code aus, indem Sie auf "Code-Snippet ausführen" klicken.

Datums- und Zeitmuster

yy= Zweistelliges Jahr; yyyy= volles Jahr

M= Ziffernmonat; MM= Zweistelliger Monat; MMM= kurzer Monatsname; MMMM= vollständiger Monatsname

EEEE= vollständiger Wochentagsname; EEE= kurzer Wochentagsname

d= Zifferntag; dd= 2-stelliger Tag

h= Stunden morgens / abends; hh= Zweistellige Stunden am / pm; H= Stunden; HH= Zweistellige Stunden

m= Minuten; mm= Zweistellige Minuten; aaa= AM / PM

s= Sekunden; ss= 2-stellige Sekunden

S = Millisekunden

var monthNames = [
  "January", "February", "March", "April", "May", "June", "July",
  "August", "September", "October", "November", "December"
];
var dayOfWeekNames = [
  "Sunday", "Monday", "Tuesday",
  "Wednesday", "Thursday", "Friday", "Saturday"
];
function formatDate(date, patternStr){
    if (!patternStr) {
        patternStr = 'M/d/yyyy';
    }
    var day = date.getDate(),
        month = date.getMonth(),
        year = date.getFullYear(),
        hour = date.getHours(),
        minute = date.getMinutes(),
        second = date.getSeconds(),
        miliseconds = date.getMilliseconds(),
        h = hour % 12,
        hh = twoDigitPad(h),
        HH = twoDigitPad(hour),
        mm = twoDigitPad(minute),
        ss = twoDigitPad(second),
        aaa = hour < 12 ? 'AM' : 'PM',
        EEEE = dayOfWeekNames[date.getDay()],
        EEE = EEEE.substr(0, 3),
        dd = twoDigitPad(day),
        M = month + 1,
        MM = twoDigitPad(M),
        MMMM = monthNames[month],
        MMM = MMMM.substr(0, 3),
        yyyy = year + "",
        yy = yyyy.substr(2, 2)
    ;
    // checks to see if month name will be used
    patternStr = patternStr
      .replace('hh', hh).replace('h', h)
      .replace('HH', HH).replace('H', hour)
      .replace('mm', mm).replace('m', minute)
      .replace('ss', ss).replace('s', second)
      .replace('S', miliseconds)
      .replace('dd', dd).replace('d', day)
      
      .replace('EEEE', EEEE).replace('EEE', EEE)
      .replace('yyyy', yyyy)
      .replace('yy', yy)
      .replace('aaa', aaa);
    if (patternStr.indexOf('MMM') > -1) {
        patternStr = patternStr
          .replace('MMMM', MMMM)
          .replace('MMM', MMM);
    }
    else {
        patternStr = patternStr
          .replace('MM', MM)
          .replace('M', M);
    }
    return patternStr;
}
function twoDigitPad(num) {
    return num < 10 ? "0" + num : num;
}
console.log(formatDate(new Date()));
console.log(formatDate(new Date(), 'dd-MMM-yyyy')); //OP's request
console.log(formatDate(new Date(), 'EEEE, MMMM d, yyyy HH:mm:ss.S aaa'));
console.log(formatDate(new Date(), 'EEE, MMM d, yyyy HH:mm'));
console.log(formatDate(new Date(), 'yyyy-MM-dd HH:mm:ss.S'));
console.log(formatDate(new Date(), 'M/dd/yyyy h:mmaaa'));

Vielen Dank an @Gerry, dass Sie Luxon erwähnt haben.

lewdev
quelle
1
Übrigens wurde die lästige SimpleDateFormatKlasse vor Jahren von der java.time.format.DateTimeFormatterKlasse abgelöst.
Basil Bourque
1
@BasilBourque, notiert. Sie verwenden beide die gleichen Muster. Ich war 5 Jahre lang in einem Pre-Java8-Projekt, also wurde ich nie mit den neueren Dingen konfrontiert. Vielen Dank!
Lewdev
Weitere Informationen finden Sie im ThreeTen-Backport- Projekt für Java 6 und 7, um die meisten Funktionen von java.time mit nahezu identischer API zu erhalten.
Basil Bourque
@BasilBourque, danke für den Hinweis, aber ich arbeite nicht mehr an diesem Projekt, aber ich werde dies auf jeden Fall berücksichtigen, wenn es auftaucht.
Lewdev
2
Moment ist veraltet, verwenden Sie Luxon
Gerry
19

Hier ist ein Code, den ich gerade geschrieben habe, um die Datumsformatierung für ein Projekt zu handhaben, an dem ich arbeite. Es ahmt die PHP-Datumsformatierungsfunktion nach, die meinen Anforderungen entspricht. Fühlen Sie sich frei, es zu verwenden, es erweitert nur das bereits vorhandene Date () -Objekt. Dies ist vielleicht nicht die eleganteste Lösung, aber sie funktioniert für meine Bedürfnisse.

var d = new Date(); 
d_string = d.format("m/d/Y h:i:s");

/**************************************
 * Date class extension
 * 
 */
    // Provide month names
    Date.prototype.getMonthName = function(){
        var month_names = [
                            'January',
                            'February',
                            'March',
                            'April',
                            'May',
                            'June',
                            'July',
                            'August',
                            'September',
                            'October',
                            'November',
                            'December'
                        ];

        return month_names[this.getMonth()];
    }

    // Provide month abbreviation
    Date.prototype.getMonthAbbr = function(){
        var month_abbrs = [
                            'Jan',
                            'Feb',
                            'Mar',
                            'Apr',
                            'May',
                            'Jun',
                            'Jul',
                            'Aug',
                            'Sep',
                            'Oct',
                            'Nov',
                            'Dec'
                        ];

        return month_abbrs[this.getMonth()];
    }

    // Provide full day of week name
    Date.prototype.getDayFull = function(){
        var days_full = [
                            'Sunday',
                            'Monday',
                            'Tuesday',
                            'Wednesday',
                            'Thursday',
                            'Friday',
                            'Saturday'
                        ];
        return days_full[this.getDay()];
    };

    // Provide full day of week name
    Date.prototype.getDayAbbr = function(){
        var days_abbr = [
                            'Sun',
                            'Mon',
                            'Tue',
                            'Wed',
                            'Thur',
                            'Fri',
                            'Sat'
                        ];
        return days_abbr[this.getDay()];
    };

    // Provide the day of year 1-365
    Date.prototype.getDayOfYear = function() {
        var onejan = new Date(this.getFullYear(),0,1);
        return Math.ceil((this - onejan) / 86400000);
    };

    // Provide the day suffix (st,nd,rd,th)
    Date.prototype.getDaySuffix = function() {
        var d = this.getDate();
        var sfx = ["th","st","nd","rd"];
        var val = d%100;

        return (sfx[(val-20)%10] || sfx[val] || sfx[0]);
    };

    // Provide Week of Year
    Date.prototype.getWeekOfYear = function() {
        var onejan = new Date(this.getFullYear(),0,1);
        return Math.ceil((((this - onejan) / 86400000) + onejan.getDay()+1)/7);
    } 

    // Provide if it is a leap year or not
    Date.prototype.isLeapYear = function(){
        var yr = this.getFullYear();

        if ((parseInt(yr)%4) == 0){
            if (parseInt(yr)%100 == 0){
                if (parseInt(yr)%400 != 0){
                    return false;
                }
                if (parseInt(yr)%400 == 0){
                    return true;
                }
            }
            if (parseInt(yr)%100 != 0){
                return true;
            }
        }
        if ((parseInt(yr)%4) != 0){
            return false;
        } 
    };

    // Provide Number of Days in a given month
    Date.prototype.getMonthDayCount = function() {
        var month_day_counts = [
                                    31,
                                    this.isLeapYear() ? 29 : 28,
                                    31,
                                    30,
                                    31,
                                    30,
                                    31,
                                    31,
                                    30,
                                    31,
                                    30,
                                    31
                                ];

        return month_day_counts[this.getMonth()];
    } 

    // format provided date into this.format format
    Date.prototype.format = function(dateFormat){
        // break apart format string into array of characters
        dateFormat = dateFormat.split("");

        var date = this.getDate(),
            month = this.getMonth(),
            hours = this.getHours(),
            minutes = this.getMinutes(),
            seconds = this.getSeconds();
        // get all date properties ( based on PHP date object functionality )
        var date_props = {
            d: date < 10 ? '0'+date : date,
            D: this.getDayAbbr(),
            j: this.getDate(),
            l: this.getDayFull(),
            S: this.getDaySuffix(),
            w: this.getDay(),
            z: this.getDayOfYear(),
            W: this.getWeekOfYear(),
            F: this.getMonthName(),
            m: month < 10 ? '0'+(month+1) : month+1,
            M: this.getMonthAbbr(),
            n: month+1,
            t: this.getMonthDayCount(),
            L: this.isLeapYear() ? '1' : '0',
            Y: this.getFullYear(),
            y: this.getFullYear()+''.substring(2,4),
            a: hours > 12 ? 'pm' : 'am',
            A: hours > 12 ? 'PM' : 'AM',
            g: hours % 12 > 0 ? hours % 12 : 12,
            G: hours > 0 ? hours : "12",
            h: hours % 12 > 0 ? hours % 12 : 12,
            H: hours,
            i: minutes < 10 ? '0' + minutes : minutes,
            s: seconds < 10 ? '0' + seconds : seconds           
        };

        // loop through format array of characters and add matching data else add the format character (:,/, etc.)
        var date_string = "";
        for(var i=0;i<dateFormat.length;i++){
            var f = dateFormat[i];
            if(f.match(/[a-zA-Z]/g)){
                date_string += date_props[f] ? date_props[f] : '';
            } else {
                date_string += f;
            }
        }

        return date_string;
    };
/*
 *
 * END - Date class extension
 * 
 ************************************/
Jmiraglia
quelle
18

Eine JavaScript-Lösung ohne Verwendung externer Bibliotheken:

var now = new Date()
months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
var formattedDate = now.getDate() + "-" + months[now.getMonth()] + "-" + now.getFullYear()
alert(formattedDate)
Prasad DLV
quelle
16

new Date().toLocaleDateString()

// "3/21/2018"

Weitere Dokumentation unter developer.mozilla.org

Kirk Strobeck
quelle
1
Es sollte beachtet werden, dass Sie niemals document.write () verwenden sollten. Riesige Sicherheits- und Leistungsprobleme
Eugene Fidelin
15

Wir haben viele Lösungen dafür, aber ich denke, die beste davon ist Moment.js. Ich persönlich schlage daher vor, Moment.js für Datums- und Zeitoperationen zu verwenden.

console.log(moment().format('DD-MMM-YYYY'));
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.14.1/moment.min.js"></script>

Vijay Maheriya
quelle
Warum schließen Sie jquery ein?
Ced
1
Ohh sorry es ist nicht erforderlich. Danke @Ced
Vijay Maheriya
Wie gebe ich das Datum an, an dem ich moment.js haben muss? Ich denke, es braucht immer aktuelle Zeit.
Dave Ranjan
1
@ DaveRanjan Ich denke, Sie müssen Ihr benutzerdefiniertes Datum konvertieren. Verwenden Sie also Folgendes: console.log (Moment ('2016-08-10'). Format ('TT-MMM-JJJJ'));
Vijay Maheriya
Ja, habe es später herausgefunden. Danke :)
Dave Ranjan
15

Eine nützliche und flexible Möglichkeit zum Formatieren der DateTimes in JavaScript ist Intl.DateTimeFormat:

var date = new Date();
var options = { year: 'numeric', month: 'short', day: '2-digit'};
var _resultDate = new Intl.DateTimeFormat('en-GB', options).format(date);
// The _resultDate is: "12 Oct 2017"
// Replace all spaces with - and then log it.
console.log(_resultDate.replace(/ /g,'-'));

Ergebnis ist: "12-Oct-2017"

Die Datums- und Uhrzeitformate können mithilfe des Optionsarguments angepasst werden.

Das Intl.DateTimeFormatObjekt ist ein Konstruktor für Objekte, die eine sprachempfindliche Formatierung von Datum und Uhrzeit ermöglichen.

Syntax

new Intl.DateTimeFormat([locales[, options]])
Intl.DateTimeFormat.call(this[, locales[, options]])

Parameter

Gebietsschemas

Optional. Eine Zeichenfolge mit einem BCP 47-Sprach-Tag oder ein Array solcher Zeichenfolgen. Die allgemeine Form und Interpretation des Gebietsschemas finden Sie auf der Seite Intl. Die folgenden Unicode-Erweiterungsschlüssel sind zulässig:

nu
Numbering system. Possible values include: "arab", "arabext", "bali", "beng", "deva", "fullwide", "gujr", "guru", "hanidec", "khmr", "knda", "laoo", "latn", "limb", "mlym", "mong", "mymr", "orya", "tamldec", "telu", "thai", "tibt".
ca
Calendar. Possible values include: "buddhist", "chinese", "coptic", "ethioaa", "ethiopic", "gregory", "hebrew", "indian", "islamic", "islamicc", "iso8601", "japanese", "persian", "roc".

Optionen

Optional. Ein Objekt mit einigen oder allen der folgenden Eigenschaften:

localeMatcher

Der zu verwendende Gebietsschema-Matching-Algorithmus. Mögliche Werte sind "lookup"und "best fit"; Der Standardwert ist "best fit". Informationen zu dieser Option finden Sie auf der Seite Intl.

Zeitzone

Die zu verwendende Zeitzone. Der einzige Wert, den Implementierungen erkennen müssen, ist "UTC": Der Standardwert ist die Standardzeitzone der Laufzeit. Implementierungen können auch die Zeitzonennamen der IANA Zeitzonendatenbank erkennen, wie "Asia/Shanghai", "Asia/Kolkata", "America/New_York".

Stunde12

Gibt an, ob eine 12-Stunden-Zeit verwendet werden soll (im Gegensatz zu einer 24-Stunden-Zeit). Mögliche Werte sind trueund false; Die Standardeinstellung ist vom Gebietsschema abhängig.

formatMatcher

Der zu verwendende Formatanpassungsalgorithmus. Mögliche Werte sind "basic"und "best fit"; Der Standardwert ist "best fit". Informationen zur Verwendung dieser Eigenschaft finden Sie in den folgenden Abschnitten.

Die folgenden Eigenschaften beschreiben die Datums- / Uhrzeitkomponenten, die in der formatierten Ausgabe verwendet werden sollen, und ihre gewünschten Darstellungen. Implementierungen sind erforderlich, um mindestens die folgenden Teilmengen zu unterstützen:

weekday, year, month, day, hour, minute, second
weekday, year, month, day
year, month, day
year, month
month, day
hour, minute, second
hour, minute

Implementierungen unterstützen möglicherweise andere Teilmengen, und Anforderungen werden gegen alle verfügbaren Teilmengen-Repräsentationskombinationen ausgehandelt, um die beste Übereinstimmung zu finden. Für diese Aushandlung stehen zwei Algorithmen zur Verfügung, die von der formatMatcher-Eigenschaft ausgewählt werden: Ein vollständig spezifizierter "basic"Algorithmus und ein implementierungsabhängiger "Best-Fit" -Algorithmus.

Wochentag

Die Darstellung des Wochentags. Mögliche Werte sind "narrow", "short", "long".

Epoche

Die Darstellung der Ära. Mögliche Werte sind "narrow", "short", "long".

Jahr

Die Darstellung des Jahres. Mögliche Werte sind "numeric", "2-digit".

Monat

Die Darstellung des Monats. Mögliche Werte sind "numeric", "2-digit", "narrow", "short", "long".

Tag

Die Darstellung des Tages. Mögliche Werte sind "numeric", "2-digit".

Stunde

Die Darstellung der Stunde. Mögliche Werte sind "numeric", "2-digit".

Minute

Die Darstellung der Minute. Mögliche Werte sind "numeric", "2-digit".

zweite

Die Darstellung des zweiten. Mögliche Werte sind "numeric", "2-digit".

timeZoneName

Die Darstellung des Zeitzonennamens. Mögliche Werte sind "short", "long". Der Standardwert für jede Datums- / Uhrzeit-Komponenteneigenschaft ist undefiniert. Wenn jedoch alle Komponenteneigenschaften undefiniert sind, werden Jahr, Monat und Tag angenommen "numeric".

Online prüfen

Mehr Details

Iman Bahrampour
quelle
15

Dies kann bei dem Problem helfen:

var d = new Date();

var options = {   
    day: 'numeric',
    month: 'long', 
    year: 'numeric'
};

console.log(d.toLocaleDateString('en-ZA', options));

Datum, an dem das Format gefunden werden soll

Herr Nsubuga
quelle
2
oder d.toLocaleDateString('en-US', options);wenn Sie in den USA sind.
BishopZ
Das war meine Lösung. Vielen Dank.
Steven Rogers
13

So habe ich meine npm-Plugins implementiert

var monthNames = [
  "January", "February", "March",
  "April", "May", "June", "July",
  "August", "September", "October",
  "November", "December"
];

var Days = [
  "Sunday", "Monday", "Tuesday", "Wednesday",
  "Thursday", "Friday", "Saturday"
];

var formatDate = function(dt,format){
  format = format.replace('ss', pad(dt.getSeconds(),2));
  format = format.replace('s', dt.getSeconds());
  format = format.replace('dd', pad(dt.getDate(),2));
  format = format.replace('d', dt.getDate());
  format = format.replace('mm', pad(dt.getMinutes(),2));
  format = format.replace('m', dt.getMinutes());
  format = format.replace('MMMM', monthNames[dt.getMonth()]);
  format = format.replace('MMM', monthNames[dt.getMonth()].substring(0,3));
  format = format.replace('MM', pad(dt.getMonth()+1,2));
  format = format.replace(/M(?![ao])/, dt.getMonth()+1);
  format = format.replace('DD', Days[dt.getDay()]);
  format = format.replace(/D(?!e)/, Days[dt.getDay()].substring(0,3));
  format = format.replace('yyyy', dt.getFullYear());
  format = format.replace('YYYY', dt.getFullYear());
  format = format.replace('yy', (dt.getFullYear()+"").substring(2));
  format = format.replace('YY', (dt.getFullYear()+"").substring(2));
  format = format.replace('HH', pad(dt.getHours(),2));
  format = format.replace('H', dt.getHours());
  return format;
}

pad = function(n, width, z) {
  z = z || '0';
  n = n + '';
  return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;
}
Amit Kumar Gupta
quelle
Auf welches Paket beziehen Sie sich?
lbrahim
Dies hat einen Fehler: Monatsnamen werden zuerst ersetzt, dann wird auch der Name des Monats ersetzt. Zum Beispiel Marchwird 3archmit diesem Code.
Ntaso
1
Ändern Sie die Zeile für 'M'bis format = format.replace("M(?!M)", (dt.getMonth()+1).toString());und setzen Sie sie über die Zeile mit'MMMM'
ntaso
9
var today = new Date();
var formattedToday = today.toLocaleDateString() + ' ' + today.toLocaleTimeString();
Gennadiy Ryabkin
quelle
8

Sugar.js verfügt über hervorragende Erweiterungen des Date-Objekts, einschließlich einer Date.format- Methode.

Beispiele aus der Dokumentation:

Date.create().format('{Weekday} {Month} {dd}, {yyyy}');

Date.create().format('{12hr}:{mm}{tt}')
hasen
quelle
8

Für alle, die nach einer wirklich einfachen ES6-Lösung zum Kopieren, Einfügen und Übernehmen suchen:

const dateToString = d => `${d.getFullYear()}-${('00' + (d.getMonth() + 1)).slice(-2)}-${('00' + d.getDate()).slice(-2)}` 

// how to use:
const myDate = new Date(Date.parse('04 Dec 1995 00:12:00 GMT'))
console.log(dateToString(myDate)) // 1995-12-04

Hinrich
quelle
8

Ab 2019 können Sie toLocaleDateString so einstellen, dass nur bestimmte Teile zurückgegeben werden. Anschließend können Sie sie nach Belieben verbinden:

var date = new Date();

console.log(date.toLocaleDateString("en-US", { day: 'numeric' }) 
            + "-"+ date.toLocaleDateString("en-US", { month: 'short' })
            + "-" + date.toLocaleDateString("en-US", { year: 'numeric' }) );

> 16-Nov-2019

console.log(date.toLocaleDateString("en-US", { month: 'long' }) 
            + " " + date.toLocaleDateString("en-US", { day: 'numeric' }) 
            + ", " + date.toLocaleDateString("en-US", { year: 'numeric' }) );

> November 16, 2019
K Vij
quelle
8

Sie sollten sich DayJs ansehen. Es ist ein Remake von Momenten, aber die modulare Architektur ist so leicht ausgerichtet.

Schnelle 2-KB-Alternative zu Moment.js mit derselben modernen API

Day.js ist eine minimalistische JavaScript-Bibliothek, die Datums- und Uhrzeitangaben für moderne Browser mit einer weitgehend Moment.js-kompatiblen API analysiert, validiert, bearbeitet und anzeigt. Wenn Sie Moment.js verwenden, wissen Sie bereits, wie Sie Day.js verwenden.

var date = Date.now();
const formatedDate = dayjs(date).format("YYYY-MM-DD")
console.log(formatedDate);
<script src="https://cdnjs.cloudflare.com/ajax/libs/dayjs/1.8.16/dayjs.min.js" crossorigin="anonymous"></script>

Melchia
quelle
7

Um "10-Aug-2010" zu erhalten, versuchen Sie:

var date = new Date('2010-08-10 00:00:00');
date = date.toLocaleDateString(undefined, {day:'2-digit'}) + '-' + date.toLocaleDateString(undefined, {month:'short'}) + '-' + date.toLocaleDateString(undefined, {year:'numeric'})

Informationen zur Browserunterstützung finden Sie unter toLocaleDateString .

Seite? ˅
quelle
Ich brauchte kein "-", hier ist eine kürzere Version mit Zeit, Datum und Zeitzone! Datum = neues Datum (); date.toLocaleDateString (undefiniert, {Tag: '2-stellig', Monat: 'kurz', Jahr: 'numerisch', Stunde: 'numerisch', Minute: 'numerisch', timeZoneName: 'kurz'}); :)
Varun