Как javascript узнает часовой пояс даты в миллисекундах? - PullRequest
1 голос
/ 07 декабря 2010

Следующий код при исполнении с использованием интерактивной среды js w3schools ( здесь ):

var d1=new Date(1306796400000);
document.write("Original form: " + d1);

отображает следующее сообщение:

Original form: Tue May 31 2011 00:00:00 GMT+0100 (GMT Daylight Time)

Но это:

var d1=new Date(1231977600000);
document.write("Original form: " + d1);

отображает это сообщение:

Original form: Thu Jan 15 2009 00:00:00 GMT+0000 (GMT Standard Time)

Я думал, что значение миллисекунды было всего лишь миллисекундами с 01.01.1970 в UTC. Но похоже, что он содержит флаг для часового пояса.

Кто-нибудь может сказать, что такое формат значения в миллисекундах?

Заранее спасибо.

Ответы [ 4 ]

4 голосов
/ 07 декабря 2010

Специального флага нет. Это всего лишь летнее время в действии.

1 голос
/ 07 декабря 2010

Javascript выполняется внутри браузера пользователя, который, в свою очередь, читает текущий часовой пояс из операционной системы пользователя. Вот так он может «угадать» правильный часовой пояс.

0 голосов
/ 07 декабря 2010

Это не так. Он использует информацию о местном часовом поясе, включая дату перехода на летнее время. Отсюда и разница в

javascript:alert([new Date(1306796400000),new Date(1231977600000)].join('\n'))

Установите для своего региона часовой пояс без DST и разница исчезнет.

0 голосов
/ 07 декабря 2010

Миллисекунды не содержат таких флагов. Однако часовой пояс объекта даты, который вы создаете с помощью new Date(n), зависит от локали в вашем интерпретаторе / браузере. Для меня:

var d = new Date(1231977600000);

d.toString();
// "Wed Jan 14 2009 17:00:00 GMT-0700 (Mountain Standard Time)"

d.toUTCString();
// "Thu, 15 Jan 2009 00:00:00 GMT"
...