2013-08-02 4 views
7

Wie der Titel fragt, ist die Ausgabe von Date.toString() (genauer Date.toTimeString()) immer im selben Format, in allen Browsern?Ist die Ausgabe von Date.toString() immer im selben Format?

Ich frage dies seit der EMCAScript specification sagt, dass die "Inhalte des String sind implementierungsabhängig".


Ich muss dafür stellen Sie sicher, weil ich den String formatiert werden müssen, indem HTML Einfügen span Elemente wie folgt:

(new Date()).toTimeString().replace(" GMT", "<span id='offset'> GMT") + '</span>');

Dies würde produzieren (in Google Chrome v28.0.1500.95 etwas) wie

18:19:26<span id="offset"> GMT-0700 (Pacific Daylight Time)</span>

das ich kann dann Stil mit CSS.


Vorschläge für bessere Möglichkeiten, die Ausgabe zu stylen, wäre auch toll!

+2

Sie haben bereits eine Antwort erhalten! Es ist * implementierungsabhängig * wie du erwähnt hast. Daher schlage ich vor, dass Sie keinen Code schreiben, der auf dem aktuellen Implementierungsergebnis basiert. – Mics

+0

Obwohl ich zu spät bin, um dies zu beantworten, werde ich meine Kommentare zugunsten anderer hinterlassen, die auf diese Frage eine Antwort suchen: - Die Spezifikation ist darüber klar. Es lautet: "Der Inhalt der Zeichenfolge von toString() ist implementierungsabhängig." (Siehe: ecma-international.org/ecma-262/5.1/#sec-15.9.5.2) Wenn Sie Daten stringieren müssen, dann ist dies eine bessere Alternative ist toISOString() zu verwenden, das laut der Spezifikation streng "YYYY-MM-DDTHH: mm: ss.sssZ" formatiert ist. (Siehe: ecma-international.org/ecma-262/5.1/#sec-15.9.5.43) –

Antwort

3

Kurz gesagt, toString gibt nicht immer das gleiche Format aus.

new Date().toString() 

druckt

  • "Sa 11. Februar 2012 02.15.10 GMT + 0100" in Firefox 10
  • „Sa 11. Februar 2012 02.18.29 GMT + 0100 (W. Europe Standard Time)“in Chrome 16
  • "Sa 11 Feb 02.18.59 UTC + 0100 2012" in Internet Explorer 9

ich weiß, dass diese ältere Browser-Version, aber es zeigt, dass es die Stirn ser abhängig.

Wenn jedoch toTimeString() verwenden sie es erscheint immer beginnt mit Stunden: Minuten: Sekunden [Leerzeichen] ...

Daher könnten Sie spalten, anstatt die Zeichenfolge in zwei Abschnitte auf der ersten [Leerzeichen] Basis mit:

indexOf(" ")

Dann mit Ihrem Spanne um den zweiten Teil wickeln

Moment hat einige String-Formatierung von Daten, aber es ist auch nicht Ihre Anfrage behandeln ed Offset-String sehr gut, da es von der toString() -Methode abhängt.

Ich hoffe, dass

+0

Danke für die eingehende Antwort. Ich werde wahrscheinlich dann in JavaScript einen eigenen Datumsformatierer erstellen; Moment.js ist ein bisschen zu schwer (einige Funktionen, die ich wahrscheinlich nicht verwenden werde). –

+1

Die Spezifikation ist klar darüber. Es lautet "Der Inhalt der Zeichenfolge von toString() ist implementierungsabhängig" (siehe: http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.5.2) Wenn Sie Datum streichen muss dann eine bessere Alternative ist toISOString(), die gemäß der Spezifikation ist streng "YYYY-MM-DDTHH: mm: ss.sssZ" formatiert. (Siehe: http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.5.43) –

-1

Moment.js hilft, ist eine schöne Bibliothek für Termine in JS Formatierung. https://github.com/moment/moment

Andernfalls ja, Sie werden es am Ende selbst analysieren, da Browser dies anders rendern.

Verwandte Themen