2009-07-06 10 views
21

Co to jest niezmienna od kultury metoda konstruowania łańcucha znaków, tak aby konstruktor JavaScript Date() mógł go parsować i utworzyć właściwy obiekt daty?Poprawny ciąg formatu JavaScript Date.parse (...)?

Próbowałem te ciągi formatu, które nie działa (przy użyciu C# wygenerować ciągi):

clientDate.ToString(); 
// gives: "11/05/2009 17:35:23 +00:00" 

clientDate.ToString("MMM' 'dd', 'yyyy' 'h':'mm':'ss' 'tt"); 
// works on an English server 
// but on a French server, gives: "mai 11, 2009 5:35:23" 
// Javascript won't parse that. 

clientDate.ToString("MM'-'dd'-'yyyy' 'HH':'mm':'ss") 
// gives: 05-11-2009 17:35:23 

Jaki jest uniwersalny format ??

+0

Dobre pytanie, to jest trudny problem. – annakata

+0

Dlaczego chcesz mieć jeden ciąg znaków? – Boldewyn

+0

Muszę emitować ciąg znaków do przeglądarki, aby można było użyć JavaScript do zlokalizowania ciągu znaków, używając funkcji Javascript toLocaleString(). Miałem jednak trudności ze znalezieniem udanego, jednoniciowego formatu, który będzie emitowany przez wszystkie moje serwery. –

Odpowiedz

19

According to MDC:

Biorąc pod uwagę ciąg reprezentujący czas, parse zwraca wartość czasową. Przyjmuje on składnię daty standardu IETF (RFC 1123 sekcja 5.2.14 i inne): "Mon, 25 Dec 1995 13:30:00 GMT". Rozumie skróty kontynentalnych stref czasowych w USA, ale do ogólnego użytku użyj przesunięcia strefy czasowej, na przykład "Mon, 25 Dec 1995 13:30:00 GMT+0430" (4 godziny, 30 minut na wschód od południka Greenwich). Jeśli nie określisz strefy czasowej, przyjęta zostanie lokalna strefa czasowa. GMT i UTC są uważane za równoważne.

Jeśli nie można wygenerować ten format używając angielskiego locale, spróbuj użyć Date.UTC

+0

RFC 1123 na ratunek! Dzięki Maciej! –

1

Jeśli chcesz format locale niezależne Javascript można analizować, można użyć 2013-03-31T16:36:57+0900. Działa przynajmniej w Node.js i Chrome, więc podejrzewam, że jest standardowy.

+0

Nie działa w systemie Android 2.2 (działa w wersji 2.3 i nowszych). Nie działa na żadnym urządzeniu z systemem iOS (testowane wersje 5.0 i 6.0). –

+0

Co powiesz na '2013-03-31T16: 36: 57Z'? Działa tutaj na iOS. Różnica to czas, który musi być teraz GMT. – jcayzac

+1

Gdyby tylko to było takie proste ... Ten format (to się nazywa ISO-8601) również nie zadziała w IE8. –