2013-08-02 7 views
7

Jak pyta tytuł, czy dane wyjściowe z Date.toString() (dokładniej: Date.toTimeString()) są zawsze w tym samym formacie we wszystkich przeglądarkach?Czy dane wyjściowe funkcji Date.toString() są zawsze w tym samym formacie?

Pytam o to, ponieważ EMCAScript specification mówi, że "zawartość ciągu jest zależna od implementacji".


muszę się upewnić, z tego powodu trzeba sformatować ciąg przez wstawienie elementów HTML span następująco:

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

byłoby to produkować (w Google Chrome v28.0.1500.95) coś

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

które mogę potem styl z CSS.


Sugestie dotyczące lepszych sposobów kształtowania wyników również byłyby wspaniałe!

+2

Masz już odpowiedź! Jest to * zależne od implementacji *, o czym wspomniałeś. Sugeruję więc, abyś nie pisał kodu w oparciu o wynik obecnej implementacji. – Mics

+0

Mimo że jestem spóźniony, aby odpowiedzieć na to pytanie, zostawiam moje komentarze dla korzyści innych, którzy wylądują w tym pytaniu, szukając odpowiedzi: - Specyfikacja jest jasna. Brzmi to następująco: "Treść ciągu znaków od toString() zależy od implementacji" (zobacz: ecma-international.org/ecma-262/5.1/#sec-15.9.5.2) Jeśli musisz splajtować date, lepsza alternatywa należy użyć do funkcji toOSOString(), która zgodnie ze specyfikacją ma format "YYYY-MM-DDTHH: mm: ss.sssZ". (Patrz: ecma-international.org/ecma-262/5.1/#sec-15.9.5.43) –

Odpowiedz

3

W skrócie, nie, toString nie zawsze wyprowadza ten sam format.

new Date().toString() 

drukuje

  • "So 11 lutego 2012 02:15:10 GMT + 0100" w Firefoksie 10
  • „So 11 lutego 2012 02:18:29 GMT + 0100 (W. Europa standard Time)”w Chrome 16
  • "So 11 lutego 0100 02:18:59 UTC + 2012" w programie Internet Explorer 9

wiem to starsza wersja, ale to pokazuje, że jest to czoło ser zależny.

Jednak podczas korzystania toTimeString() wydaje się to zawsze zaczyna się od godziny: minuty: sekundy [spacja] ...

Można więc zamiast podzielić ciąg na 2 porcje na podstawie pierwszego [spacja] z:

indexOf(" ")

Następnie owinąć drugą część z zakresu

Moment robi jakiś ciąg formatowanie daty, ale to również nie obsługuje żądania ed offset łańcuch bardzo dobrze, ponieważ zależy od metody toString().

Mam nadzieję, że pomaga

+0

Dzięki za dogłębną odpowiedź. Najprawdopodobniej utworzę własny program do formatowania daty w JavaScript; Moment.js jest trochę za ciężki (niektóre funkcje prawdopodobnie nie będę używał). –

+1

Specyfikacja jest jasna. Brzmi: "Zawartość ciągu znaków od toString() zależy od implementacji" (Patrz: http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.5.2) Jeśli należy spisać datę datą thena lepszą alternatywą jest użycie toOSOString(), które zgodnie ze specyfikacją ma format "YYYY-MM-DDTHH: mm: ss.sssZ". (Patrz: http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.5.43) –

-1

Moment.js jest miłym biblioteka do formatowania daty JS. https://github.com/moment/moment

W innym przypadku tak, skończymy parsować samemu, ponieważ przeglądarki renderują to inaczej.

Powiązane problemy