2011-01-18 13 views
5

Mam problem z klasą danych na koniec dnia, która pozornie zwraca nieprawidłową strefę czasową dla przeanalizowanej daty. Korzystanie poniższy kod utworzyć obiekt Date do 24 maja, 1966 15:46 BST:Daty i strefy czasowe ExtJS

date = "1966-05-24T15:46:01+0100"; 
var pDate = Date.parseDate(date, "Y-m-d\\TH:i:sO", false); 

I wtedy nazwać:

console.log(pDate.getGMTOffset()); 

Oczekuję, aby uzyskać przesunięcie związane z orignal Data powrotu (czyli GMT + 1), ale zamiast tego dostaję lokalną strefę czasową przeglądarki. Jeśli przeglądarka jest ustawiona na strefę czasową wystarczająco daleko przed GMT, część dzienna daty zostanie również przeniesiona (więc data będzie teraz wyświetlana jako 25 maja 1966).

Czy ktoś wie, jak obejść ten problem i uzyskać od Ext rozpoznanie właściwej strefy czasowej przeanalizowanej daty zamiast lokalnej strefy czasowej przeglądarki?

Jeśli nie jest to możliwe, czy Ext może być zmuszony do używania GMT zamiast interpretowania stref czasowych?

Odpowiedz

6

Sprawdziłem parseDate() implementation in ExtJS source code i documentation of Date in core JavaScript, konstruktor Date() używany przez ExtJS nie obsługuje informacji o strefie czasowej. Obiekty daty JavaScript reprezentują wartość UTC bez strefy czasowej. Podczas parsowania w kodzie źródłowym ExtJS strefa czasowa jest tracona, a odpowiednie przesunięcie w minutach/sekundach jest dodawane do daty.

Sprawdziłem następnie source code of getGMTOffset() defined by ExtJS: tworzy łańcuch strefy czasowej za pomocą funkcji getTimezoneOffset() zdefiniowanej w JavaScript.

Cytowanie documentation of getTimezoneOffset():

czasowych strefę offsetu jest różnica pomiędzy czasem lokalnym a Greenwich (GMT). Czas letni zapobiega stałej wartości stałej .

Czas strefa nie jest zmienną przechowywane w Dniu, jest to wartość, która zmienia się w zależności od okresu roku, że data przypada w.

Na moim komputerze z francuską lokalizacji ,

new Date(2010,1,20).getTimezoneOffset() 
// -60 
new Date(2010,9,20).getTimezoneOffset() 
// -120 

Edit: to zachowanie nie jest specyficzna Data parsowania w ExtJS następujący notatka w documentation of Date.parse() on Mozilla Doc Center jest istotne również tutaj:

pamiętać, że strefa czasowa projektantom są wykorzystywane podczas parsowania datę ciąg do poprawnie zinterpretować argument, że nie wpływają na wartość zwracana, który jest zawsze liczba milisekund między 1 stycznia 1970 00:00:00 UTC i punkt w czasie reprezentowany przez argument.

+2

Dzięki, wiele przydatnych informacji tam. W przypadku przyszłych użytkowników Google, którzy zdarzają się w tym wątku, udało mi się rozwiązać problem, ustawiając wszystkie daty na 12.00 w południe, więc Ext nie będzie w stanie spowodować dnia w celu obejścia oryginalnego problemu. Nie idealne, ale działa wystarczająco dobrze ... – TimS

0

Moje dwa centy, ponieważ nie mogę ustawić wszystkich godzin na 12:00, tak jak Tim.Zamieściłem na sencha forum