Frage

Ich habe bemerkt, dass JavaScript der new Date() Funktion bei der Annahme Daten in verschiedenen Formaten sehr klug ist.

Xmas95 = new Date("25 Dec, 1995 23:15:00")
Xmas95 = new Date("2009 06 12,12:52:39")
Xmas95 = new Date("20 09 2006,12:52:39")

Ich konnte nicht finden überall Dokumentation alle gültigen String-Formate zeigt, während new Date() Funktion aufrufen.

Dies ist eine Zeichenkette in ein Datum umzuwandeln. Wenn wir auf der gegenüberliegenden Seite sehen, das heißt, ein Datum Objekt in eine Zeichenfolge konvertieren, bis jetzt habe ich den Eindruck, dass Sie JavaScript nicht über eine eingebaute API ein Datum Objekt in einen String formatiert werden.

  

Anmerkung der Redaktion: Der folgende Ansatz ist der Versuch der Fragesteller, der auf einem bestimmten Browser gearbeitet, aber tut nicht Arbeit im Allgemeinen; sehen die Antworten auf dieser Seite einige tatsächliche Lösungen zu sehen.

Heute spielte ich mit der toString() Methode zum Zeitpunkt Objekt und überraschend dient sie den Zweck Zeitpunkt Strings der Formatierung.

var d1 = new Date();
d1.toString('yyyy-MM-dd');       //Returns "2009-06-29" in Internet Explorer, but not Firefox or Chrome
d1.toString('dddd, MMMM ,yyyy')  //Returns "Monday, June 29,2009" in Internet Explorer, but not Firefox or Chrome

Auch hier konnte ich keine Dokumentation finden auf allen Möglichkeiten, wie wir das Datum Objekt in einen String formatiert werden kann.

Wo ist die Dokumentation, die die Formatbezeich vom Date() Objekt unterstützt auflistet?

War es hilfreich?

Lösung

I love 10 Wege, um Format Datum und Uhrzeit mit Hilfe von JavaScript und Arbeiten mit Termine .

Grundsätzlich haben Sie drei Methoden, und Sie müssen die Saiten selbst kombinieren:

getDate() // Returns the date
getMonth() // Returns the month
getFullYear() // Returns the year

Beispiel:

var d = new Date();
var curr_date = d.getDate();
var curr_month = d.getMonth() + 1; //Months are zero based
var curr_year = d.getFullYear();
console.log(curr_date + "-" + curr_month + "-" + curr_year);

Andere Tipps

Moment.js

Es ist eine (leichte) * JavaScript-Datum Bibliothek für das Parsen, Bearbeitung und Formatierung Daten.

var a = moment([2010, 1, 14, 15, 25, 50, 125]);
a.format("dddd, MMMM Do YYYY, h:mm:ss a"); // "Sunday, February 14th 2010, 3:25:50 pm"
a.format("ddd, hA");                       // "Sun, 3PM"

(*) leichte Bedeutung 9.3KB minified + gzip auf kleinsten Setup (Februar 2014)

Wenn Sie bereits jQuery UI in Ihrem Projekt verwenden, können Sie verwenden, die sich im internen picker Methode für Ihr Date-Objekt Formatierung:

$.datepicker.formatDate('yy-mm-dd', new Date(2007, 1 - 1, 26));

Allerdings formatiert die Datumsauswahl nur Daten und kann nicht mal formatiert werden.

Hier finden Sie aktuelle jQuery UI Datepicker format , die Beispiele.

  

Wo ist die Dokumentation, die die Formatbezeich vom Date() Objekt unterstützt auflistet?

ich auf diese heute gestolpert und war ziemlich überrascht, dass niemand die Zeit, diese einfache Frage zu beantworten hat. Zwar gibt es viele Bibliotheken gibt mit Datum Manipulation zu helfen. Einige sind besser als andere. Aber das war nicht die Frage gestellt.

AFAIK, reine JavaScript nicht unterstützt Formatbezeichner die Art und Weise Sie angegeben haben, Sie möchten, dass sie nutzen . Aber es unterstützt Methoden zur Formatierung von Datums- und / oder Zeiten, wie .toLocaleDateString(), .toLocaleTimeString() und .toUTCString().

Die Date Objektreferenz ich am häufigsten verwenden ist auf der w3schools.com Website (aber a schnelle Google-Suche viele mehr zeigen, dass besser kann Ihre Bedürfnisse erfüllen).

Beachten Sie auch, dass die Datum Objekteigenschaften einen Link zu prototype bietet, das zeigt einige Möglichkeiten, wie Sie das Date-Objekt mit benutzerdefinierten Methoden erweitern können. Es hat einige Diskussionen in der JavaScript-Community über die Jahre darüber, ob nicht, dass dies am besten Praxis, und ich bin nicht für oder gegen sie befürworten, nur seine Existenz hinzuweisen.

Benutzerdefinierte Formatierungsfunktion:

Für feste Formate, eine einfache Funktion um den Job machen. Das folgende Beispiel erzeugen die internationale Format YYYY-MM-DD:

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

Hinweis: Es ist jedoch in der Regel keine gute Idee, die Javascript-Standardbibliotheken zu erweitern (zum Beispiel durch diese Funktion des Prototyp Datum Zugabe).

Eine erweiterte Funktion konfigurierbare Ausgabe basierend auf einem Formatparameter erzeugen könnte. Es gibt ein paar gute Beispiele in dieser gleichen Seite.

Wenn eine Formatierungsfunktion zu schreiben, zu lang ist, gibt es viele Bibliotheken, um die es tut. Einige andere Antworten bereits sie aufzuzählen. Aber auch zunehmende Abhängigkeiten hat es Gegenstück.

Standard ECMAScript Formatierungsfunktionen:

Da neuere Versionen von ECMAscript, die Date Klasse hat einige spezifische Formatierungsfunktionen:

  

toDateString :. Die Umsetzung abhängig ist, zeigt nur das Datum

     

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 :. Anzeigen ISO 8601 Datum und Uhrzeit

     

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 :. Die Umsetzung abhängig, ein Datum in locale-Format

     

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

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

  

toLocaleString :. Die Umsetzung abhängig ist, ein Datum und Uhrzeit in locale-Format

     

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 :. Die Umsetzung abhängig ist, eine Zeit, in locale-Format

     

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 :. Generisches toString für Date

     

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

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

Hinweis: es ist möglich, benutzerdefinierte Ausgabe aus diesen Formatierungsfunktionen zu generieren:

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

Die kurze Antwort

Es gibt keine „universelle“ Dokumentation, die Javascript bietet; jeder Browser, der Javascript hat, ist wirklich eine Implementierung. Allerdings gibt es einen Standard, der die meisten modernen Browser zu folgen neigen, und das ist der ECMAScript-Standard; der ECMAScript-Standard Strings würde, minimal, eine modifizierte Implementierung der ISO 8601-Definition.

Zusätzlich dazu gibt es einen zweiten Standard von dem IETF gesetzt vorwärts, den Browser neigt als auch zu folgen, was die Definition Zeitstempel in der RFC 2822. die tatsächlichen Dokumentation gemacht in der Referenzliste am Ende gefunden werden.

Von diesem können Sie grundlegende Funktionalität erwarten, aber was „sollte“ sein, ist nicht von Natur aus, was „ist“. Ich werde ein wenig in die Tiefe mit diesem obwohl prozedural gehen, da es nur drei Leute tatsächlich erscheint die Frage beantwortet (Scott, goofballLogic und Peller nämlich), die mir, schlägt die meisten Menschen sind sich nicht bewusst, was passiert eigentlich, wenn man erstellen ein Date-Objekt.


Die lange Antwort

  

Wo ist die Dokumentation, die die Formatangaben der Date () Objekt unterstützt auflistet?


Um die Frage zu beantworten, oder typischerweise aussehen sogar für die Antwort auf diese Frage, müssen Sie wissen, dass Sie Javascript keine neue Sprache ist; es ist eigentlich eine Implementierung von ECMAScript und folgt den ECMAScript-Standards (aber beachten Sie, javascript auch tatsächlich diese Standards vorge datiert; ECMAScript-Standards sind die frühzeitige Umsetzung von Livescript / JavaScript gebaut aus). Der aktuelle ECMAScript-Standard ist 5.1 (2011); Dies sollte ein Problem umreißen zu der Zeit, die Frage ursprünglich gefragt wurde (Juni '09), war die Standard-3 (4 aufgegeben wurde), aber 5 wurde kurz nach der Post am Ende des Jahres 2009 veröffentlicht; Was für Standard eine JavaScript-Implementierung folgen kann, reflektieren möglicherweise nicht, was tatsächlich vorhanden ist, weil es a) eine Implementierung eines bestimmten Standard ist, b) nicht alle Implementierungen eines Standard sind Puritaner, und c) Funktionalität ist nicht synchron mit einer Freigabe neuer Standard als d) eine Implementierung ist eine konstante, unfertige

Im Wesentlichen, wenn sie mit Javascript tun haben, sind Sie mit einem Derivat handelt (JavaScript spezifisch für den Browser) einer Implementierung (JavaScript selbst). Googles V8 zum Beispiel implementiert ECMAScript 5.0, aber Internet Explorer JScript nicht versucht, einen ECMAScript-Standard zu entsprechen, noch Internet Explorer 9 zu ECMAScript 5.0 nicht entspricht.

Wenn ein einziges Argument an neues Datum () übergibt, es wirft diese Funktion Prototyp:

new Date(value)

Wenn zwei oder mehr Argumente werden neue Datum () übergeben, es wirft diese Funktion Prototyp:

new Date (year, month [, date [, hours [, minutes [, seconds [, ms ] ] ] ] ] )


Diese beiden Funktionen sollten bekannt vorkommen, aber dies nicht sofort Ihre Frage beantworten und was quantifiziert als ein akzeptabler „Datumsformat“ eine weitere Erklärung erfordert. Wenn Sie eine Zeichenfolge an new Date () übergeben, wird der Prototyp nennen (beachten Sie, dass ich das Wort bin mit Prototyp lose, die Versionen einzelnen Funktionen sein können, oder sie kann Teil einer bedingten sein Anweisung in einer einzelnen Funktion) für new Date (Wert) mit der Zeichenfolge als Argument für den „Wert“ Parameter. Diese Funktion wird zunächst prüfen, ob es eine Zahl oder eine Zeichenfolge. Die Dokumentation für diese Funktion finden Sie hier:

  

http://www.ecma-international.org /ecma-262/5.1/#sec-15.9.3.2

Daraus können wir ableiten, dass die Zeichenfolge für new Date (Wert) erlaubt die Formatierung zu erhalten, haben wir bei der Methode Date.parse (string) suchen. Die Dokumentation für diese Methode finden Sie hier:

  

http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.4.2

Und wir können weiter ableiten, dass Daten in einer modifizierten ISO 8601 Extended Format erwartet werden, wie hier angegeben:

  

http://www.ecma-international.org /ecma-262/5.1/#sec-15.9.1.15

Allerdings können wir aus Erfahrung wissen, dass Date-Objekt ist Javascript andere Formate akzeptiert (durch die Existenz dieser Frage in erster Linie durchgesetzt), und das ist in Ordnung, weil ECMAScript für bestimmte Formate Implementierung ermöglicht. Allerdings ist zu beantworten, die noch nicht die Frage, was Dokumentation zu den verfügbaren Formaten verfügbar ist, noch welche Formate sind eigentlich erlaubt. Wir werden bei Googles JavaScript-Implementierung suchen, V8; Bitte beachten Sie, ich bin nicht darauf hindeutet, das der „beste“ Javascript-Engine ist (wie kann man „beste“ oder sogar „gut“ definieren), und man kann nicht davon ausgehen, dass die in V8 erlaubt Formaten alle Formate zur Verfügung stellt heute, aber ich denke, es ist fair anzunehmen, sie moderne Erwartungen haben folgen.

  

Googles V8, date.js, DateConstructor

     

https: // code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#141

Mit Blick auf die DateConstructor Funktion, können wir ableiten, wir die DateParse Funktion finden müssen; jedoch beachten, dass „Jahr“ nicht das aktuelle Jahr und ist nur ein Verweis auf die „Jahr“ Parameter.

  

Googles V8, date.js, DateParse

     

https: // code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#270

Dies erfordert% DateParseString, die eigentlich eine Laufzeitfunktionsreferenz für eine C ++ Funktion ist. Er bezieht sich auf den folgenden Code:

  

Googles V8, runtime.cc,% DateParseString

     

https: // code.google.com/p/v8/source/browse/trunk/src/runtime.cc?r=18400#9559

Der Funktionsaufruf mit dem wir in dieser Funktion betroffen sind ist für DateParser :: Parse (); ignoriert die Logik dieser Funktionsaufrufe umgibt, das ist nur auf den Codierungstyp (ASCII und UC16) entsprechen prüft. DateParser :: Parse ist hier definiert:

  

Googles V8, dateparser-inl.h, DateParser :: Parse

     

https: //code.google.com/p/v8/source/browse/trunk/src/dateparser-inl.h?r=18400#36

Dies ist die Funktion, die tatsächlich definiert, welche Formate sie akzeptiert. Im Wesentlichen überprüft es für den ECMAScript 5.0 ISO 8601 Standard und wenn es nicht standardkonform ist, dann wird es versuchen, den Zeitpunkt zu bauen, basierend auf Legacy-Formaten. Ein paar wichtige Punkte auf der Grundlage der Kommentare:

  1. Worte, bevor die ersten Zahl, die den Parser nicht bekannt sind, werden ignoriert.
  2. in Klammern Text ignoriert werden.
  3. Zahlen ohne Vorzeichen, gefolgt von „:“. Werden als „Zeitkomponente“ interpretiert
  4. Zahlen ohne Vorzeichen, gefolgt von „“ werden als „Zeitkomponente“ interpretiert und muss von Millisekunden folgen.
  5. Signed Zahlen von Stunde zu Stunde oder Stunde Minute gefolgt (z +5: 15 oder 0515). Als die Zeitzone interpretiert
  6. Wenn die Stunde und Minute zu erklären, können Sie entweder. „Hh: mm“ oder „hhmm“
  7. Wörter, die eine Zeitzone angeben, werden als Zeitzone interpretiert.
  8. Alle anderen Zahlen werden als „Datum Komponenten“ interpretiert.
  9. Alle Wörter, die mit den ersten drei Ziffern eines Monats beginnen, werden als die interpretierteMonat.
  10. Sie können Minuten und Stunden zusammen in einem der beiden Formate definieren. „Hh: mm“ oder „hhmm“
  11. Symbole wie „+“, „-“. Und unerreichten „)“ sind nicht erlaubt nach einer Reihe verarbeitet wurde
  12. Elemente, die mehrere Formate (z 1970-01-01) verarbeitet werden als Standard-konform ECMAScript 5.0 ISO 8601 String.
  13. entsprechen

So soll dies ausreicht, um Ihnen eine grundlegende Vorstellung davon zu geben, was zu erwarten, wenn es darum geht, eine Zeichenfolge in ein Date-Objekt übergeben. Sie können weiterhin auf diese erweitern, indem sie auf der folgenden Spezifikation, die Mozilla Punkte auf dem Mozilla Developer Network (konform zu der IETF RFC 2822 Zeitstempel) auf der Suche:

  

http://tools.ietf.org/html/rfc2822#page-14

Das Microsoft Developer Network zusätzlich erwähnt einen weiteren Standard für das Date-Objekt: ECMA-402, die ECMAScript Internationalization API-Spezifikation, die die ECMAScript 5.1 Standard komplementär (und Zukunft ist). Das kann hier gefunden werden:

  

http://www.ecma-international.org/ecma-402/1.0 /

In jedem Fall sollte diese Hilfe bei der Hervorhebung, dass es keine „Dokumentation“ ist die universell alle Implementierungen von JavaScript darstellt, aber es gibt immer noch genug Dokumentation vernünftigen Sinn machen von dem, was Saiten für ein Date-Objekt akzeptabel sind. Ganz die geladene Frage, wenn man darüber nachdenkt, nicht wahr? : P

  

Referenzen

     

http://www.ecma-international.org /ecma-262/5.1/#sec-15.9.3.2

     

http://www.ecma-international.org /ecma-262/5.1/#sec-15.9.4.2

     

http://www.ecma-international.org /ecma-262/5.1/#sec-15.9.1.15

     

http://tools.ietf.org/html/rfc2822#page-14

     

http://www.ecma-international.org/ecma-402/1.0 /

     

https: // code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#141

     

https: // code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#270

     

https: // code.google.com/p/v8/source/browse/trunk/src/runtime.cc?r=18400#9559

     

https: //code.google.com/p/v8/source/browse/trunk/src/dateparser-inl.h?r=18400#36

     

Ressourcen

     

https://developer.mozilla.org/ en-US / docs / Web / JavaScript / Reference / Global_Objects / Datum

     

http://msdn.microsoft.com /en-us/library/ff743760(v=vs.94).aspx

Stellen Sie sicher, Kasse Datejs wenn mit Daten in JavaScript zu tun. Es ist ziemlich beeindruckend und gut dokumentiert, wie Sie bei der toString Funktion .

Bearbeiten : Tyler Forsythe weist darauf hin, dass datejs veraltet ist. Ich benutze es in meinem aktuellen Projekt und hatte keine Probleme mit ihm, aber Sie sollten sich dessen bewusst sein und Alternativen in Betracht ziehen.

Sie können nur das Date Objekt mit einer neuen format Methode erweitern wie bereits von meizz , unten ist der Code des Autors gegeben. Und hier ist ein jsfiddle .

Date.prototype.format = function(format) //author: meizz
{
  var o = {
    "M+" : this.getMonth()+1, //month
    "d+" : this.getDate(),    //day
    "h+" : this.getHours(),   //hour
    "m+" : this.getMinutes(), //minute
    "s+" : this.getSeconds(), //second
    "q+" : Math.floor((this.getMonth()+3)/3),  //quarter
    "S" : this.getMilliseconds() //millisecond
  }

  if(/(y+)/.test(format)) format=format.replace(RegExp.$1,
    (this.getFullYear()+"").substr(4 - RegExp.$1.length));
  for(var k in o)if(new RegExp("("+ k +")").test(format))
    format = format.replace(RegExp.$1,
      RegExp.$1.length==1 ? o[k] :
        ("00"+ o[k]).substr((""+ o[k]).length));
  return format;
}

alert(new Date().format("yyyy-MM-dd"));
alert(new Date("january 12 2008 11:12:30").format("yyyy-MM-dd h:mm:ss"));

Die Funktionalität, die Sie zitieren ist nicht Standard Javascript, wahrscheinlich nicht tragbar in allen Browsern sein und daher keine gute Praxis. Die ECMAScript 3 spec verlässt die parsen und Ausgabeformate Funktion bis die Javascript-Implementierung. ECMAScript 5 fügt eine Teilmenge von ISO8601 Unterstützung. Ich glaube, die toString () Funktion, die Sie erwähnen, ist eine Innovation in einem Browser (Mozilla?)

Mehrere Bibliotheken bieten Routinen dies, einige mit umfangreicher Lokalisierungsunterstützung zu parametrieren. Sie können auch die Methoden überprüfen in dojo.date.locale .

ich diese sehr einfache Formatierer gemacht, es wird geschnitten / n / verpastbarem (aktualisiert mit sauberere Version):

function DateFmt(fstr) {
  this.formatString = fstr

  var mthNames = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];
  var dayNames = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];
  var zeroPad = function(number) {
     return ("0"+number).substr(-2,2);
  }

  var dateMarkers = {
    d:['getDate',function(v) { return zeroPad(v)}],
    m:['getMonth',function(v) { return zeroPad(v+1)}],
    n:['getMonth',function(v) { return mthNames[v]; }],
    w:['getDay',function(v) { return dayNames[v]; }],
    y:['getFullYear'],
    H:['getHours',function(v) { return zeroPad(v)}],
    M:['getMinutes',function(v) { return zeroPad(v)}],
    S:['getSeconds',function(v) { return zeroPad(v)}],
    i:['toISOString']
  };

  this.format = function(date) {
    var dateTxt = this.formatString.replace(/%(.)/g, function(m, p) {
      var rv = date[(dateMarkers[p])[0]]()

      if ( dateMarkers[p][1] != null ) rv = dateMarkers[p][1](rv)

      return rv

    });

    return dateTxt
  }

}

fmt = new DateFmt("%w %d:%n:%y - %H:%M:%S  %i")
v = fmt.format(new Date())

http://snipplr.com/view/66968.82825/

Rahmen frei, begrenzt aber Licht

var d = (new Date()+'').split(' ');
// ["Tue", "Sep", "03", "2013", "21:54:52", "GMT-0500", "(Central", "Daylight", "Time)"]

[d[3], d[1], d[2], d[4]].join(' ');
// "2013 Sep 03 21:58:03"

DateJS ist sicherlich voll funktionsfähige, aber ich würde empfehlen, diese viel einfacher lib (JavaScript Date Format) , die ich lieber einfach, weil es nur 120 Zeilen ist oder so.

Nachdem in anderen Antworten zur Verfügung gestellt einige der Optionen durchgesehen, habe ich beschlossen, meine eigene begrenzte, aber einfache Lösung zu schreiben, die andere auch nützlich sein können.

/**
* Format date as a string
* @param date - a date object (usually "new Date();")
* @param format - a string format, eg. "DD-MM-YYYY"
*/
function dateFormat(date, format) {
    // Calculate date parts and replace instances in format string accordingly
    format = format.replace("DD", (date.getDate() < 10 ? '0' : '') + date.getDate()); // Pad with '0' if needed
    format = format.replace("MM", (date.getMonth() < 9 ? '0' : '') + (date.getMonth() + 1)); // Months are zero-based
    format = format.replace("YYYY", date.getFullYear());
    return format;
}

Beispiel Nutzung:

console.log("The date is: " + dateFormat(new Date(), "DD/MM/YYYY"));

Hier ist eine Funktion, die ich viel verwenden. Das Ergebnis ist jjjj-mm-tt hh: mm:. Ss.nnn

function date_and_time() {
    var date = new Date();
    //zero-pad a single zero if needed
    var zp = function (val){
        return (val <= 9 ? '0' + val : '' + val);
    }

    //zero-pad up to two zeroes if needed
    var zp2 = function(val){
        return val <= 99? (val <=9? '00' + val : '0' + val) : ('' + val ) ;
    }

    var d = date.getDate();
    var m = date.getMonth() + 1;
    var y = date.getFullYear();
    var h = date.getHours();
    var min = date.getMinutes();
    var s = date.getSeconds();
    var ms = date.getMilliseconds();
    return '' + y + '-' + zp(m) + '-' + zp(d) + ' ' + zp(h) + ':' + zp(min) + ':' + zp(s) + '.' + zp2(ms);
}

Sie können feststellen, nützlich, diese Änderung des Datumsobjekts, die kleiner ist als jede Bibliothek und ist leicht erweiterbar auf unterschiedliche Formate zu unterstützen:

Hinweis:

  • Es verwendet Object.keys () , die in älteren Browsern nicht definiert ist, so dass Sie polyfill von bestimmten Link implementieren müssen.

CODE

Date.prototype.format = function(format) {
    // set default format if function argument not provided
    format = format || 'YYYY-MM-DD hh:mm';

    var zeropad = function(number, length) {
            number = number.toString();
            length = length || 2;
            while(number.length < length)
                number = '0' + number;
            return number;
        },
        // here you can define your formats
        formats = {
            YYYY: this.getFullYear(),
            MM: zeropad(this.getMonth() + 1),
            DD: zeropad(this.getDate()),
            hh: zeropad(this.getHours()),
            mm: zeropad(this.getMinutes())
        },
        pattern = '(' + Object.keys(formats).join(')|(') + ')';

    return format.replace(new RegExp(pattern, 'g'), function(match) {
        return formats[match];
    });
};

var now = new Date;
console.log(now.format());
// outputs: 2015-02-09 11:47
var yesterday = new Date('2015-02-08');
console.log(yesterday.format('hh:mm YYYY/MM/DD'));
// outputs: 00:00 2015/02/08

Just gongzhitaao solide Antwort auf weiter - diese Griffe AM / PM

 Date.prototype.format = function (format) //author: meizz
{
    var hours = this.getHours();
    var ttime = "AM";
    if(format.indexOf("t") > -1 && hours > 12)
    {
        hours = hours - 12;
        ttime = "PM";
     }

var o = {
    "M+": this.getMonth() + 1, //month
    "d+": this.getDate(),    //day
    "h+": hours,   //hour
    "m+": this.getMinutes(), //minute
    "s+": this.getSeconds(), //second
    "q+": Math.floor((this.getMonth() + 3) / 3),  //quarter
    "S": this.getMilliseconds(), //millisecond,
    "t+": ttime
}

if (/(y+)/.test(format)) format = format.replace(RegExp.$1,
  (this.getFullYear() + "").substr(4 - RegExp.$1.length));
for (var k in o) if (new RegExp("(" + k + ")").test(format))
    format = format.replace(RegExp.$1,
      RegExp.$1.length == 1 ? o[k] :
        ("00" + o[k]).substr(("" + o[k]).length));
return format;
}

Ich konnte keine definitive Dokumentation zu gültigen Datumsformate finden, damit ich meinen eigenen Test geschrieben, um zu sehen, was in den verschiedenen Browsern unterstützt wird.

http://blarg.co.uk/blog/javascript-date-formats

Meine Ergebnisse schlossen die folgenden Formate in allen Browsern gültig sind, die ich (Beispiele verwenden das Datum „9. August 2013“) getestet:

[Full Jahr] / [Monat] / [Datum Nummer] - Monat kann entweder die Zahl mit oder ohne führende Null oder den Namen des Monats in Kurz- oder Langform und Datum Zahl sein kann mit oder ohne führende Null.

  • 2013.08.09
  • 2013.08.09
  • 2013.08.09
  • 2013.08.09
  • 2013 / August / 09
  • 2013 / August / 9
  • 2013 / Aug / 09
  • 2013 / Aug / 9

[Monat] / [Gesamtjahr] / [Datum Anzahl] - Monat kann entweder die Zahl mit oder ohne führende Null oder die Monatsnamen in Kurz- oder Langform und Datum Zahl sein kann mit oder ohne führende Null.

  • 08/2013/09
  • 08/2013/9
  • 8/2013/09
  • 8/2013/9
  • August / 2013/09
  • August / 2013/9
  • Aug / 2013/09
  • Aug / 2013/9

Jede Kombination von [Full Jahr], [Monat Namen] und [Datum Nummer] durch Leerzeichen getrennt - Monatsname in entweder kurz oder lang-Format sein können, und das Datum Nummer kann mit oder ohne seinen eine führende Null.

  • 2013 9. August
  • August 2013 09
  • 9. August 2013
  • 2013 9. August
  • 9. August 2013
  • 2013 9. August
  • etc ...

Gilt auch in „modernen Browser“ (oder mit anderen Worten alle Browser außer IE9 und unten)

[Full Jahr] - [Monat Nummer] - [Datum Nummer] - Monat und Datum Anzahl müssen führende Nullen enthalten (dies ist das Format, das die MySQL Datumstyp verwendet)

  • 2013.08.09

Verwendung von Monatsnamen:
Interessanterweise, wenn Monat Namen entdeckte ich, dass nur die ersten drei Zeichen des Monatsnamens jemals verwendet, so dass alle der folgenden sind perfekt gültig:

new Date('9 August 2013');
new Date('9 Aug 2013');
new Date('9 Augu 2013');
new Date('9 Augustagfsdgsd 2013');

Die Formatierung und vor allem das Parsen Daten in JavaScript kann ein wenig Kopfschmerzen sein. Nicht alle Browser behandeln Daten in der gleichen Weise. So, während es ist nützlich, um die Basis Methoden zu kennen, dessen praktischer Helfer eine Bibliothek zu verwenden.

Die XDate JavaScript-Bibliothek von Adam Shaw hat. Es hat eine fantastische Dokumentation, eine große API, Formatierung, versucht zu bleiben abwärtskompatibel und unterstützt sogar lokalisierte Strings.

Link, um die Locale-Strings zu ändern: https://gist.github.com/1221376

Beispielcode:

var d = new Date();
var time = d.toISOString().replace(/.*?T(\d+:\d+:\d+).*/, "$1");

Ausgabe:

  

"13.45.20"

Die Bibliothek sugar.js hat einige großartige Funktionen für die Termine in JavaScript arbeiten. Und es ist sehr gut dokumentiert .

  

Zucker gibt die Date-Klasse viel Liebe mit dem Date.create Start   Verfahren, die Termine in fast jedem Format in 15 großen verstehen   Sprachen, einschließlich der relativen Formate wie „vor 1 Stunde“. Termine können   auch die Ausgabe in einem beliebigen Format oder Sprache sein, eine einfache Anwendung zu verstehen   Syntax, mit Verknüpfungen zu Datumsformate verwendet. komplexe Datum   Vergleich ist auch möglich, mit Methoden wie ist, die jeder verstehen   Format und in Präzision gebaut gelten.

Ein paar Beispiele:

Date.create('July 4, 1776')  -> July 4, 1776
Date.create(-446806800000)   -> November 5, 1955
Date.create(1776, 6, 4)      -> July 4, 1776
Date.create('1776年07月04日', 'ja') -> July 4, 1776
Date.utc.create('July 4, 1776', 'en')  -> July 4, 1776

Date.create().format('{Weekday} {d} {Month}, {yyyy}')    -> Monday July 4, 2003
Date.create().format('{hh}:{mm}')                        -> 15:57
Date.create().format('{12hr}:{mm}{tt}')                  -> 3:57pm
Date.create().format(Date.ISO8601_DATETIME)              -> 2011-07-05 12:24:55.528Z

Date.create().is('the 7th of June') -> false
Date.create().addMonths(2); ->"Sunday, June 15, 2014 13:39"

Alle Browser

Der zuverlässigste Weg, ein Datum mit dem Quellformat zu formatieren Sie verwenden, ist die folgenden Schritte anzuwenden:

  1. Verwenden Sie new Date() ein Date Objekt erstellen
  2. Verwenden Sie .getDate(), .getMonth() und .getFullYear() erhalten jeweils den Tag, Monat und Jahr
  3. Fügen Sie die Stücke zusammen nach Ihrem Zielformat

Beispiel:

var date = '2015-11-09T10:46:15.097Z';

function format(input) {
    var date = new Date(input);
    return [
       ("0" + date.getDate()).slice(-2),
       ("0" + (date.getMonth()+1)).slice(-2),
       date.getFullYear()
    ].join('/');
}

document.body.innerHTML = format(date); // OUTPUT : 09/11/2015

(Siehe auch dieses Fiddle ).


Moderne Browser nur

Sie können auch die eingebaute in .toLocaleDateString Methode verwenden, um die Formatierung für Sie zu tun. Sie müssen nur an der richtigen locale und Optionen übergeben das richtige Format passen, die leider nur von modernen Browsern unterstützt wird (*) :

var date = '2015-11-09T10:46:15.097Z';

function format(input) {
    return new Date(input).toLocaleDateString('en-GB', {
        year: 'numeric',
        month: '2-digit',
        day: '2-digit'
    });
}

document.body.innerHTML = format(date); // OUTPUT : 09/11/2015

(Siehe auch dieses Fiddle ).


(*) nach dem MDN "Moderne Browser" bedeutet Chrome 24+, 29+ Firefox, IE11, Kante 12 +, Opera 15+ & Safari nächtliche bauen

Nur eine weitere Option, die ich schrieb:

DP_DateExtensions Bibliothek

Nicht sicher, ob es hilft, aber ich habe in mehreren Projekten es nützlich gefunden -. Sieht aus wie es werde tun, was Sie brauchen,

Unterstützt Datum / Uhrzeit Formatierung, Datum Mathematik (addieren / subtrahieren Datum Teile), Datum vergleichen, Datum Parsing usw. Es ist großzügig Quellen öffnen.

Kein Grund, es zu prüfen, ob Sie bereits ein Framework (sie sind alle in der Lage), aber wenn Sie nur brauchen, um schnell Datum Manipulation zu einem Projekt gibt ihm eine Chance.

hinzufügen

Der richtige Weg, um ein Datum zu formatieren „2012.12.29“ zurückzukehren ist mit dem Skript von JavaScript-Date-Format :

var d1 = new Date();
return d1.format("dd-m-yy");

Dieser Code funktioniert nicht:

var d1 = new Date();
d1.toString('yyyy-MM-dd');      

Wenn Sie mit nur Zeit zeigen wollen zwei Ziffern, kann dies helfen Ihnen:

var now = new Date();
var cHour = now.getHours();
var cMinuts = now.getMinutes();
var cSeconds = now.getSeconds();

var outStr = (cHour <= 0 ? ('0' + cHour) : cHour) + ':' + (cMinuts <= 9 ? ('0' + cMinuts) : cMinuts) + ':' + (cSeconds <= 9 ? '0' + cSeconds : cSeconds);

Diese Funktionen verwenden

toTimeString() and toLocaleDateString()

Link unten verweisen für weitere Details https://developer.mozilla.org/en-US / docs / Web / JavaScript / Reference / Global_Objects / Datum

JsSimpleDateFormat ist eine Bibliothek, die das Format kann Date-Objekt und analysiert, um den formatierten String zurück zum Date-Objekt. Es verwendet die Java-Format (Simple Klasse). Der Name von Monaten und Tagen kann lokalisiert werden.

Beispiel:

var sdf = new JsSimpleDateFormat("EEEE, MMMM dd, yyyy");
var formattedString = sdf.format(new Date());
var dateObject = sdf.parse("Monday, June 29, 2009");

Die Antwort ist „nirgendwo“, da die Datumsformatierung proprietäre Funktionalität ist. Ich glaube nicht, die toString Funktionen bestimmt sind, zu einem bestimmten Format entsprechen. z.B. in der ECMAScript 5.1-Spezifikation ( http: //www.ecma -international.org/publications/files/ECMA-ST/Ecma-262.pdf , 2013.02.08, Seite 173), folgt die toString Funktion dokumentiert wie:

  

„Der Inhalt des String ist abhängig von der Implementierung“

Funktionen wie die Proben unten verwendet werden könnten, die Formatierung ziemlich leicht zu erreichen.

function pad(toPad, padWith) {
    return (String(padWith) + String(toPad)).slice(-1 * padWith.length);
}

function dateAsInputValue(toFormat) {
    if(!(toFormat instanceof Date)) return null;
    return toFormat.getFullYear() + "-" + pad(toFormat.getMonth() + 1, "00") + "-" + pad(toFormat.getDate(), "00");
}

function timeAsInputValue(toFormat) {
    if(!(toFormat instanceof Date)) return null;        
    return pad(toFormat.getHours(), "00") + ":" + pad(toFormat.getMinutes(), "00") + ":" + pad(toFormat.getSeconds(), "00");
}

Wenn Sie brauchen nicht alle Funktionen, die eine Bibliothek wie Moment.js bietet, können Sie meine verwenden Hafen von strftime . Es ist leicht (1,35 KB vs. 57,9 KB minimierte zu Moment.js verglichen 2.15.0) und bietet die meisten Funktionen von strftime().

/* Port of strftime(). Compatibility notes:
 *
 * %c - formatted string is slightly different
 * %D - not implemented (use "%m/%d/%y" or "%d/%m/%y")
 * %e - space is not added
 * %E - not implemented
 * %h - not implemented (use "%b")
 * %k - space is not added
 * %n - not implemented (use "\n")
 * %O - not implemented
 * %r - not implemented (use "%I:%M:%S %p")
 * %R - not implemented (use "%H:%M")
 * %t - not implemented (use "\t")
 * %T - not implemented (use "%H:%M:%S")
 * %U - not implemented
 * %W - not implemented
 * %+ - not implemented
 * %% - not implemented (use "%")
 *
 * strftime() reference:
 * http://man7.org/linux/man-pages/man3/strftime.3.html
 *
 * Day of year (%j) code based on Joe Orost's answer:
 * http://stackoverflow.com/questions/8619879/javascript-calculate-the-day-of-the-year-1-366
 *
 * Week number (%V) code based on Taco van den Broek's prototype:
 * http://techblog.procurios.nl/k/news/view/33796/14863/calculate-iso-8601-week-and-year-in-javascript.html
 */
function strftime(sFormat, date) {
  if (!(date instanceof Date)) date = new Date();
  var nDay = date.getDay(),
    nDate = date.getDate(),
    nMonth = date.getMonth(),
    nYear = date.getFullYear(),
    nHour = date.getHours(),
    aDays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
    aMonths = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
    aDayCount = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334],
    isLeapYear = function() {
      if (nYear&3!==0) return false;
      return nYear%100!==0 || year%400===0;
    },
    getThursday = function() {
      var target = new Date(date);
      target.setDate(nDate - ((nDay+6)%7) + 3);
      return target;
    },
    zeroPad = function(nNum, nPad) {
      return ('' + (Math.pow(10, nPad) + nNum)).slice(1);
    };
  return sFormat.replace(/%[a-z]/gi, function(sMatch) {
    return {
      '%a': aDays[nDay].slice(0,3),
      '%A': aDays[nDay],
      '%b': aMonths[nMonth].slice(0,3),
      '%B': aMonths[nMonth],
      '%c': date.toUTCString(),
      '%C': Math.floor(nYear/100),
      '%d': zeroPad(nDate, 2),
      '%e': nDate,
      '%F': date.toISOString().slice(0,10),
      '%G': getThursday().getFullYear(),
      '%g': ('' + getThursday().getFullYear()).slice(2),
      '%H': zeroPad(nHour, 2),
      '%I': zeroPad((nHour+11)%12 + 1, 2),
      '%j': zeroPad(aDayCount[nMonth] + nDate + ((nMonth>1 && isLeapYear()) ? 1 : 0), 3),
      '%k': '' + nHour,
      '%l': (nHour+11)%12 + 1,
      '%m': zeroPad(nMonth + 1, 2),
      '%M': zeroPad(date.getMinutes(), 2),
      '%p': (nHour<12) ? 'AM' : 'PM',
      '%P': (nHour<12) ? 'am' : 'pm',
      '%s': Math.round(date.getTime()/1000),
      '%S': zeroPad(date.getSeconds(), 2),
      '%u': nDay || 7,
      '%V': (function() {
              var target = getThursday(),
                n1stThu = target.valueOf();
              target.setMonth(0, 1);
              var nJan1 = target.getDay();
              if (nJan1!==4) target.setMonth(0, 1 + ((4-nJan1)+7)%7);
              return zeroPad(1 + Math.ceil((n1stThu-target)/604800000), 2);
            })(),
      '%w': '' + nDay,
      '%x': date.toLocaleDateString(),
      '%X': date.toLocaleTimeString(),
      '%y': ('' + nYear).slice(2),
      '%Y': nYear,
      '%z': date.toTimeString().replace(/.+GMT([+-]\d+).+/, '$1'),
      '%Z': date.toTimeString().replace(/.+\((.+?)\)$/, '$1')
    }[sMatch] || sMatch;
  });
}

Proben Nutzung:

strftime('%F'); // Returns "2016-09-15"
strftime('%A, %B %e, %Y'); // Returns "Thursday, September 15, 2016"

// You can optionally pass it a Date object...

strftime('%x %X', new Date('1/1/2016')); // Returns "1/1/2016 12:00:00 AM"

Der neueste Code finden Sie hier: https://github.com/thdoan/strftime

Persönlich, weil ich sowohl PHP und jQuery / Javascript in gleichen Teilen zu verwenden, verwende ich die Datumsfunktion von php.js http://phpjs.org/functions/date/

Mit einer Bibliothek, die die gleichen Formatstrings als etwas verwendet weiß ich schon für mich einfacher ist, und das Handbuch alle der Format-String-Möglichkeiten für die Datumsfunktion enthält, ist natürlich online unter php.net

Sie einfach schließen die date.js Datei in Ihrem HTML rufen Sie Ihre bevorzugte Methode dann wie folgt aus:

var d1=new Date();
var datestring = date('Y-m-d', d1.valueOf()/1000);

Sie können mit d1.getTime () anstelle von valueOf (), wenn Sie wollen, sie tun das gleiche.

Die Division durch 1000 des Javascript-Zeitstempel ist, weil ein Javascript-Zeitstempel in Millisekunden ist aber ein PHP-Zeitstempel in Sekunden.

Viele Frameworks (die Sie bereits verwenden könnten) haben Datumsformatierung, die Sie möglicherweise nicht bewusst sein kann. jQueryUI wurde bereits erwähnt, aber auch andere Frameworks wie Kendo UI (Globalisierung) , Yahoo UI (Util) und AngularJS sie auch haben

// 11/6/2000
kendo.toString(new Date(value), "d")

// Monday, November 06, 2000
kendo.toString(new Date(2000, 10, 6), "D")
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top