2014-10-16 9 views
8

Mam jeden dziwny problem z inicjalizacją obiektu Date. I zastanawiałem się, czy ktoś może wyjaśnić dlaczego ..Konstruktorzy dat dostarczają nieoczekiwane wyniki po wywołaniu z podobnymi argumentami.

var exp1 = new Date('2014-10-17'); 
var exp2 = new Date(2014,9,17); 
var exp3 = new Date('17 Oct 2014'); 
console.log(exp1); 
console.log(exp2); 
console.log(exp3); 

Wyniki:

 
Thu Oct 16 2014 18:00:00 GMT-0600 (MDT) // 16th? 
Fri Oct 17 2014 00:00:00 GMT-0700 (MST) // Why GMT -7 
Fri Oct 17 2014 00:00:00 GMT-0600 (MDT) // The only one that works as expected 

Dlaczego te trzy Date obiekty tak różne?

+0

Czy rzeczywiście napisałeś w 9 na drugie połączenie? czy jest to literówka, która powinna wynosić 10? – mdewitt

+0

@badaboom Z jakiej przeglądarki korzystasz? –

+2

@mdewitt Wartość miesiąca zaczyna się od 0: "Całkowita wartość reprezentująca miesiąc, zaczynająca się od 0 dla stycznia do 11 dla grudnia". https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date –

Odpowiedz

2

Pierwsza data jest traktowana jako czas GMT, ponieważ nie podano przesunięcia strefy czasowej. Po wylogowaniu pokazuje czas w lokalnej strefie czasowej. Dodając przesunięcie (exp4 poniżej), otrzymuję oczekiwaną datę.

var exp1 = new Date('2014-10-17'); 
var exp2 = new Date(2014,9,17); 
var exp3 = new Date('17 Oct 2014'); 
var exp4 = new Date('2014-10-17z-0500'); 

Wyniki:

Thu Oct 16 2014 19:00:00 GMT-0500 (Central Daylight Time) 
Fri Oct 17 2014 00:00:00 GMT-0500 (Central Daylight Time) 
Fri Oct 17 2014 00:00:00 GMT-0500 (Central Daylight Time) 
Fri Oct 17 2014 00:00:00 GMT-0500 (Central Daylight Time) 

nie jestem pewien o exp2 dla ciebie, ale podejrzewam, że ma coś wspólnego z czasu letniego i że mieszkasz w obszarze, który nie przestrzega czasu letniego (Arizona?).

Edytuj: wydaje się to być specyficzne dla przeglądarki. Powyższe wyniki zostały wygenerowane w Chrome, natomiast w IE 11, exp4 była nieprawidłowa data. W przypadku IE 11 musiałem użyć tego formatu:

var exp4 = new Date('2014-10-17T00:00-05:00'); 
+0

Dziękuję za odpowiedź. Przesunięcie strefy czasowej .. może masz rację. Nie myślałem o tym. W każdym razie exp1 i exp3 mylą mnie. Dlaczego w pierwszym przypadku wskazano GMT, ale po drugie działa dobrze? Dość nieoczekiwana funkcjonalność .. – badaboom

+0

@badaboom Tak, różnica między exp1 i exp3 jest nieoczekiwana. Nie widziałem niczego w dokumentacji, aby to wyjaśnić, więc na tym etapie uważam, że zależy to od implementacji w przeglądarce i że obsługują one 2 ciągi inaczej podczas analizy. –

+0

ok, dziękuję. Ale myślę, że nie jest to związane z implementacją przeglądarki, może być czymś w JS .. testowane we wszystkich najnowszych przeglądarkach. – badaboom

Powiązane problemy