Mir ist aufgefallen, dass die new Date()
Funktion von JavaScript sehr intelligent ist, wenn es darum geht, Daten in verschiedenen Formaten zu akzeptieren.
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 nirgendwo eine Dokumentation finden, die alle gültigen Zeichenfolgenformate beim Aufrufen der new Date()
Funktion zeigt.
Dies dient zum Konvertieren einer Zeichenfolge in ein Datum. Wenn wir uns die gegenüberliegende Seite ansehen, dh ein Datumsobjekt in eine Zeichenfolge konvertieren, hatte ich bisher den Eindruck, dass JavaScript keine integrierte API zum Formatieren eines Datumsobjekts in eine Zeichenfolge hat.
Anmerkung des Herausgebers: Der folgende Ansatz ist der Versuch des Fragestellers, der in einem bestimmten Browser funktioniert hat, aber im Allgemeinen nicht funktioniert. In den Antworten auf dieser Seite finden Sie einige aktuelle Lösungen.
Heute habe ich mit der toString()
Methode für das Datumsobjekt gespielt und überraschenderweise dient sie dazu, das Datum für Zeichenfolgen zu formatieren.
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 darüber finden, wie wir das Datumsobjekt in eine Zeichenfolge formatieren können.
Wo befindet sich die Dokumentation, in der die vom Date()
Objekt unterstützten Formatbezeichner aufgeführt sind ?
quelle
Antworten:
Ich liebe 10 Möglichkeiten, Zeit und Datum mit JavaScript und Arbeiten mit Daten zu formatieren .
Grundsätzlich haben Sie drei Methoden und müssen die Zeichenfolgen für sich selbst kombinieren:
Beispiel:
quelle
Moment.js
Es ist eine (leichte) * JavaScript-Datumsbibliothek zum Parsen, Bearbeiten und Formatieren von Datumsangaben.
(*) Leichtgewicht bedeutet 9,3 KB minimiert + gezippt im kleinstmöglichen Setup (Februar 2014)
quelle
Wenn Sie in Ihrem Projekt bereits die jQuery-Benutzeroberfläche verwenden , können Sie die integrierte Datepicker-Methode zum Formatieren Ihres Datumsobjekts verwenden:
Der Datepicker formatiert jedoch nur Datumsangaben und kann keine Zeiten formatieren.
Schauen Sie sich die Beispiele für jQuery UI datepicker formatDate an .
quelle
Ich bin heute darauf gestoßen und war ziemlich überrascht, dass sich niemand die Zeit genommen hat, diese einfache Frage zu beantworten. Es stimmt, es gibt viele Bibliotheken, die bei der Datumsmanipulation helfen. Einige sind besser als andere. Aber das war nicht die gestellte Frage.
AFAIK, reines JavaScript unterstützt keine Formatbezeichner, wie Sie angegeben haben, dass Sie sie verwenden möchten . Aber es unterstützt Methoden zur Formatierung von Datums- und / oder Zeiten, wie
.toLocaleDateString()
,.toLocaleTimeString()
und.toUTCString()
.Die
Date
Objektreferenz, die ich am häufigsten verwende, befindet sich auf der Website w3schools.com (aber eine schnelle Google-Suche zeigt viel mehr, die Ihren Anforderungen möglicherweise besser entsprechen).Beachten Sie auch, dass der Abschnitt Eigenschaften von Datumsobjekten einen Link zu enthält
prototype
, der einige Möglichkeiten veranschaulicht, wie Sie das Datumsobjekt mit benutzerdefinierten Methoden erweitern können. Es gab einige Diskussionen in der JavaScript - Community über die Jahre darüber , ob oder nicht , das ist beste Praxis, und ich bin nicht dafür , für oder gegen sie, nur seine Existenz hinzuweisen.quelle
Benutzerdefinierte Formatierungsfunktion:
Bei festen Formaten erledigt eine einfache Funktion den Job. Das folgende Beispiel generiert das internationale Format JJJJ-MM-TT:
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. Auf derselben Seite finden Sie einige gute Beispiele.
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
Date
Klasse über einige spezifische Formatierungsfunktionen:Hinweis: Aus diesen Formatierungsfunktionen können benutzerdefinierte Ausgaben generiert werden:
quelle
Die kurze Antwort
Es gibt keine „universelle“ Dokumentation, für die Javascript geeignet ist. Jeder Browser mit Javascript ist wirklich eine Implementierung. Es gibt jedoch einen Standard, dem die meisten modernen Browser folgen, und das ist der EMCAScript-Standard. Die ECMAScript-Standardzeichenfolgen würden mindestens eine modifizierte Implementierung der ISO 8601-Definition erfordern.
Darüber hinaus gibt es einen zweiten von der IETF vorgegebenen Standard , dem auch Browser folgen. Dies ist die Definition für Zeitstempel, die im RFC 2822 erstellt wurden. Die aktuelle Dokumentation finden Sie in der Referenzliste unten.
Von diesem können Sie grundlegende Funktionen erwarten, aber was "sein sollte", ist nicht von Natur aus das, was "ist". Ich werde mich jedoch ein wenig eingehend mit diesem Verfahren befassen, da anscheinend nur drei Personen tatsächlich die Frage beantwortet haben (Scott, goofballLogic und peller), was für mich darauf hindeutet, dass die meisten Menschen nicht wissen, was tatsächlich passiert, wenn Sie Erstellen Sie ein Datumsobjekt.
Die lange Antwort
Um die Frage zu beantworten oder normalerweise sogar nach der Antwort auf diese Frage zu suchen, müssen Sie wissen, dass Javascript keine neuartige Sprache ist. Es handelt sich tatsächlich um eine Implementierung von ECMAScript und folgt den ECMAScript-Standards (beachten Sie jedoch, dass Javascript diese Standards auch tatsächlich vorweggenommen hat; EMCAScript-Standards basieren auf der frühen Implementierung von LiveScript / JavaScript). Der aktuelle ECMAScript-Standard ist 5.1 (2011); Zu dem Zeitpunkt, als die Frage ursprünglich gestellt wurde (Juni '09), war der Standard 3 (4 wurde aufgegeben), aber 5 wurde kurz nach dem Post Ende 2009 veröffentlicht. Dies sollte ein Problem umreißen; Welchem Standard eine Javascript-Implementierung folgen kann, spiegelt möglicherweise nicht wider, was tatsächlich vorhanden ist, da a) es sich um eine Implementierung eines bestimmten Standards handelt, b) nicht alle Implementierungen eines Standards puritanisch sind,
Im Wesentlichen handelt es sich beim Umgang mit Javascript um ein Derivat (für den Browser spezifisches Javascript) einer Implementierung (Javascript selbst). Google V8 implementiert beispielsweise ECMAScript 5.0, aber JScript von Internet Explorer versucht nicht, einem ECMAScript-Standard zu entsprechen, Internet Explorer 9 entspricht jedoch ECMAScript 5.0.
Wenn ein einzelnes Argument an new Date () übergeben wird, wird dieser Funktionsprototyp umgewandelt:
Wenn zwei oder mehr Argumente an new Date () übergeben werden, wird dieser Funktionsprototyp umgewandelt:
Beide Funktionen sollten vertraut aussehen, aber dies beantwortet Ihre Frage nicht sofort und was als akzeptables „Datumsformat“ quantifiziert wird, bedarf weiterer Erläuterungen. Wenn Sie eine Zeichenfolge an new Date () übergeben, wird der Prototyp aufgerufen (beachten Sie, dass ich das Wort Prototyp lose verwende; die Versionen können einzelne Funktionen sein oder Teil einer bedingten Anweisung in einer einzelnen Funktion) für neues Datum (Wert) mit Ihrer Zeichenfolge als Argument für den Parameter "Wert". Diese Funktion prüft zunächst, ob es sich um eine Zahl oder eine Zeichenfolge handelt. Die Dokumentation zu dieser Funktion finden Sie hier:
Daraus können wir schließen, dass wir uns die Methode Date.parse (Zeichenfolge) ansehen müssen, um die für neues Datum (Wert) zulässige Zeichenfolgenformatierung zu erhalten. Die Dokumentation zu dieser Methode finden Sie hier:
Und wir können weiter schließen, dass die Daten voraussichtlich in einem modifizierten erweiterten ISO 8601-Format vorliegen, wie hier angegeben:
Aus Erfahrung können wir jedoch erkennen, dass das Date-Objekt von Javascript andere Formate akzeptiert (was durch das Vorhandensein dieser Frage in erster Linie erzwungen wird), und dies ist in Ordnung, da ECMAScript implementierungsspezifische Formate zulässt. Dies beantwortet jedoch immer noch nicht die Frage, welche Dokumentation zu den verfügbaren Formaten verfügbar ist und welche Formate tatsächlich zulässig sind. Wir werden uns die Javascript-Implementierung von Google, V8, ansehen. Bitte beachten Sie, dass ich nicht vorschlage, dass dies die "beste" Javascript-Engine ist (wie kann man "beste" oder sogar "gut" definieren) und man nicht davon ausgehen kann, dass die in V8 zulässigen Formate alle heute verfügbaren Formate darstellen, aber ich denke, dass dies fair ist anzunehmen, dass sie den modernen Erwartungen folgen.
Wenn wir uns die DateConstructor-Funktion ansehen, können wir ableiten, dass wir die DateParse-Funktion finden müssen. Beachten Sie jedoch, dass „Jahr“ nicht das tatsächliche Jahr ist und nur auf den Parameter „Jahr“ verweist.
Dies ruft% DateParseString auf, was eigentlich eine Laufzeitfunktionsreferenz für eine C ++ - Funktion ist. Es bezieht sich auf den folgenden Code:
Der Funktionsaufruf, mit dem wir uns in dieser Funktion befassen, ist für DateParser :: Parse (); Ignorieren Sie die Logik, die diese Funktionsaufrufe umgibt. Dies sind lediglich Überprüfungen, um dem Codierungstyp (ASCII und UC16) zu entsprechen. DateParser :: Parse ist hier definiert:
Dies ist die Funktion, die tatsächlich definiert, welche Formate akzeptiert werden. Im Wesentlichen wird nach dem EMCAScript 5.0 ISO 8601-Standard gesucht. Wenn dieser nicht den Standards entspricht, wird versucht, das Datum auf der Grundlage älterer Formate zu erstellen. Einige wichtige Punkte basierend auf den Kommentaren:
Dies sollte also ausreichen, um Ihnen eine grundlegende Vorstellung davon zu geben, was Sie erwartet, wenn Sie eine Zeichenfolge an ein Date-Objekt übergeben. Sie können dies weiter ausbauen, indem Sie sich die folgende Spezifikation ansehen, auf die Mozilla im Mozilla Developer Network verweist (gemäß den IETF RFC 2822-Zeitstempeln):
Das Microsoft Developer Network erwähnt zusätzlich einen zusätzlichen Standard für das Date-Objekt: ECMA-402, die ECMAScript Internationalization API-Spezifikation, die den ECMAScript 5.1-Standard (und zukünftige) ergänzt. Das finden Sie hier:
In jedem Fall sollte dies dazu beitragen, hervorzuheben, dass es keine "Dokumentation" gibt, die universell alle Implementierungen von Javascript darstellt, aber dennoch genügend Dokumentation verfügbar ist, um einen vernünftigen Eindruck davon zu bekommen, welche Zeichenfolgen für ein Date-Objekt akzeptabel sind. Ziemlich die geladene Frage, wenn Sie darüber nachdenken, ja? : P.
quelle
Stellen Sie sicher, dass Sie Datejs auschecken, wenn Sie mit Datumsangaben in JavaScript arbeiten. Es ist ziemlich beeindruckend und gut dokumentiert, wie Sie im Fall der toString-Funktion sehen können .
EDIT : Tyler Forsythe weist darauf hin, dass das Datum veraltet ist. Ich verwende es in meinem aktuellen Projekt und hatte keine Probleme damit. Sie sollten sich dessen jedoch bewusst sein und Alternativen in Betracht ziehen.
quelle
Sie können das
Date
Objekt einfach mit einer neuenformat
Methode erweitern, wie von meizz angegeben . Unten finden Sie den vom Autor angegebenen Code. Und hier ist eine Geige .quelle
console.log(new Date('2014-06-01')) -> May
ich denke, es hat etwas mit der Zeitzone zu tun: DDie von Ihnen genannte Funktionalität ist kein Standard-Javascript, wahrscheinlich nicht für alle Browser portierbar und daher keine bewährte Methode. Die ECMAScript 3-Spezifikation überlässt die Funktion für Analyse- und Ausgabeformate der Javascript-Implementierung. ECMAScript 5 fügt eine Teilmenge der ISO8601-Unterstützung hinzu. Ich glaube, die von Ihnen erwähnte Funktion toString () ist eine Innovation in einem Browser (Mozilla?)
Mehrere Bibliotheken bieten Routinen zur Parametrisierung, einige mit umfassender Lokalisierungsunterstützung. Sie können die Methoden auch in dojo.date.locale überprüfen .
quelle
Ich habe diesen sehr einfachen Formatierer erstellt, er ist cut / n / pastable (aktualisiert mit einer übersichtlicheren Version):
http://snipplr.com/view/66968.82825/
quelle
new DateFmt()
)Framework frei, begrenzt aber leicht
quelle
DateJS ist sicherlich voll ausgestattet, aber ich würde diese VIEL einfachere Bibliothek (JavaScript Date Format) empfehlen, die ich einfach bevorzuge, weil sie nur etwa 120 Zeilen enthält.
quelle
Nachdem ich einige der in anderen Antworten enthaltenen Optionen durchgesehen hatte, beschloss ich, meine eigene begrenzte, aber einfache Lösung zu schreiben, die andere möglicherweise ebenfalls nützlich finden.
Anwendungsbeispiel:
quelle
format = format.replace("YY", (""+date.getFullYear()).substring(2));
. Dies wird jedoch hässlich - Sie möchten wahrscheinlich stattdessen die RegEx-Route oder ähnliches wählen.Hier ist eine Funktion, die ich oft benutze. Das Ergebnis ist JJJJ-MM-TT HH: MM: SS.NNN.
quelle
Diese Änderung des Datumsobjekts ist möglicherweise nützlich. Sie ist kleiner als jede Bibliothek und kann problemlos erweitert werden, um verschiedene Formate zu unterstützen:
HINWEIS:
CODE
VERWENDEN
quelle
Nur um die solide Antwort von Gongzhitaao fortzusetzen - dies behandelt AM / PM
quelle
Ich konnte keine endgültige Dokumentation zu gültigen Datumsformaten finden und habe meinen eigenen Test geschrieben, um festzustellen, was in verschiedenen Browsern unterstützt wird.
http://blarg.co.uk/blog/javascript-date-formats
Meine Ergebnisse haben ergeben, dass die folgenden Formate in allen von mir getesteten Browsern gültig sind (Beispiele verwenden das Datum "9. August 2013"):
[Volles Jahr] / [Monat] / [Datumsnummer] - Monat kann entweder die Zahl mit oder ohne führende Null oder der Monatsname im Kurz- oder Langformat sein, und die Datumsnummer kann mit oder ohne führende Null sein.
[Monat] / [Volles Jahr] / [Datumsnummer] - Monat kann entweder die Zahl mit oder ohne führende Null oder der Monatsname im Kurz- oder Langformat sein, und die Datumsnummer kann mit oder ohne führende Null sein.
Jede durch Leerzeichen getrennte Kombination aus [Gesamtjahr], [Monatsname] und [Datumsnummer] - Der Monatsname kann entweder kurz oder lang sein, und die Datumsnummer kann mit oder ohne führende Null sein.
Auch gültig in "modernen Browsern" (oder mit anderen Worten allen Browsern außer IE9 und darunter)
[Ganzes Jahr] - [Monatsnummer] - [Datumsnummer] - Monat und Datumsnummer müssen führende Nullen enthalten (dies ist das Format, das der MySQL-Datumstyp verwendet).
Verwenden von Monatsnamen:
Interessanterweise habe ich bei der Verwendung von Monatsnamen festgestellt, dass nur die ersten drei Zeichen des Monatsnamens verwendet werden, sodass alle folgenden Punkte vollkommen gültig sind:
quelle
Das Formatieren und insbesondere das Parsen von Daten in JavaScript kann Kopfschmerzen bereiten. Nicht alle Browser behandeln Datumsangaben gleich. Während es nützlich ist, die Basismethoden zu kennen, ist es praktischer, eine Hilfsbibliothek zu verwenden.
Die Javascript-Bibliothek XDate von Adam Shaw gibt es seit Mitte 2011 und befindet sich noch in der aktiven Entwicklung. Es hat eine fantastische Dokumentation, eine großartige API, Formatierung, versucht abwärtskompatibel zu bleiben und unterstützt sogar lokalisierte Zeichenfolgen.
Link zum Ändern der Gebietsschema-Zeichenfolgen: https://gist.github.com/1221376
quelle
Beispielcode:
Ausgabe:
quelle
new Date();// = Fri Nov 22 2013 17:48:22 GMT+0100
, wird die Ausgabe mit dem obigen Code sein"16:48:22"
Die Bibliothek sugger.js bietet einige großartige Funktionen für die Arbeit mit Datumsangaben in JavaScript. Und es ist sehr gut dokumentiert .
Einige Beispiele:
quelle
Alle Browser
Die zuverlässigste Methode zum Formatieren eines Datums mit dem von Ihnen verwendeten Quellformat besteht darin, die folgenden Schritte auszuführen:
new Date()
diese Option , um einDate
Objekt zu erstellen.getDate()
,.getMonth()
und.getFullYear()
erhalten jeweils den Tag, Monat und JahrBeispiel:
(Siehe auch diese Geige ).
Nur moderne Browser
Sie können auch die integrierte
.toLocaleDateString
Methode verwenden, um die Formatierung für Sie durchzuführen. Sie müssen nur das richtige Gebietsschema und die richtigen Optionen angeben, um das richtige Format zu finden, das leider nur von modernen Browsern unterstützt wird (*) :(Siehe auch diese Geige ).
(*) Laut MDN bedeutet "Moderne Browser" die nächtliche Erstellung von Chrome 24+, Firefox 29+, IE11, Edge12 +, Opera 15+ und Safari
quelle
Nur eine weitere Option, die ich geschrieben habe:
DP_DateExtensions-Bibliothek
Ich bin mir nicht sicher, ob es helfen wird, aber ich fand es in mehreren Projekten nützlich - es sieht so aus, als würde es das tun, was Sie brauchen.
Unterstützt Datums- / Uhrzeitformatierung, Datumsberechnung (Hinzufügen / Subtrahieren von Datumsteilen), Datumsvergleich, Datumsanalyse usw. Es ist großzügig Open Source.
Kein Grund, darüber nachzudenken, wenn Sie bereits ein Framework verwenden (alle sind in der Lage), aber wenn Sie einem Projekt nur schnell eine Datumsmanipulation hinzufügen müssen, geben Sie ihm eine Chance.
quelle
Wenn Sie nur die Zeit mit zwei Ziffern anzeigen möchten , kann dies hilfreich sein:
quelle
Verwenden Sie diese Funktionen
Weitere Informationen finden Sie unter dem folgenden Link: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date
quelle
JsSimpleDateFormat ist eine Bibliothek, die das Datumsobjekt formatieren und die formatierte Zeichenfolge zurück zum Datumsobjekt analysieren kann. Es verwendet das Java-Format (SimpleDateFormat-Klasse). Der Name von Monaten und Tagen kann lokalisiert werden.
Beispiel:
quelle
Die Antwort lautet "nirgendwo", da die Datumsformatierung eine proprietäre Funktionalität ist. Ich glaube nicht, dass die toString-Funktionen einem bestimmten Format entsprechen sollen. Beispiel: In der ECMAScript 5.1-Spezifikation ( http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf , 08.02.2013, Seite 173) ist die toString- Funktion wie folgt dokumentiert ::
Funktionen wie die folgenden Beispiele können verwendet werden, um die Formatierung relativ einfach durchzuführen.
quelle
Wenn Sie nicht alle Funktionen benötigen, die eine Bibliothek wie Moment.js bietet, können Sie meinen Strftime- Port verwenden . Es ist leicht (1,35 KB gegenüber 57,9 KB im Vergleich zu Moment.js 2.15.0) und bietet den größten Teil der Funktionalität von
strftime()
.Beispielnutzung:
Der neueste Code ist hier verfügbar: https://github.com/thdoan/strftime
quelle
Die richtige Methode zum Formatieren eines Datums für die Rückgabe von "2012-12-29" ist das Skript aus dem JavaScript-Datumsformat :
Dieser Code funktioniert NICHT:
quelle
Persönlich verwende ich die Datumsfunktion von php.js, da ich sowohl PHP als auch jQuery / Javascript gleichermaßen verwende http://phpjs.org/functions/date/
Die Verwendung einer Bibliothek, die dieselben Formatzeichenfolgen verwendet, wie ich sie bereits kenne, ist für mich einfacher, und das Handbuch mit allen Formatzeichenfolgenmöglichkeiten für die Datumsfunktion ist natürlich online unter php.net
Sie fügen einfach die Datei date.js mit Ihrer bevorzugten Methode in Ihren HTML-Code ein und rufen sie dann folgendermaßen auf:
Sie können d1.getTime () anstelle von valueOf () verwenden, wenn Sie möchten, sie tun dasselbe.
Die Division des Javascript-Zeitstempels durch 1000 erfolgt, weil ein Javascript-Zeitstempel in Millisekunden, ein PHP-Zeitstempel jedoch in Sekunden angegeben ist.
quelle
Viele Frameworks (die Sie möglicherweise bereits verwenden) verfügen über eine Datumsformatierung, die Sie möglicherweise nicht kennen. jQueryUI wurde bereits erwähnt, aber auch andere Frameworks wie Kendo UI (Globalisierung) , Yahoo UI (Util) und AngularJS haben sie.
quelle