Подтвердить что ты не робот

Даты Javascript: какой лучший способ справиться с летним временем?

В предыдущем вопросе я написал о функции даты javascript, которая была таинственно остановлена ​​11/07/101. Благодаря пользователям stackoverflow мне сказали, что проблема заключается в летнем времени. Дата Javascript, это моя ошибка или я нашел ошибку?

Итак, мой последний вопрос по этому вопросу - вот какой рекомендуемый подход в Javascript для решения проблемы с летним временем?

Является http://code.google.com/p/datejs/ лучший подход к решению этого вопроса?

4b9b3361

Ответ 1

Лучший способ - не иметь дело с DST. Используйте методы UTC, и вам не придется беспокоиться о пересечении границы DST или любом другом временном разрыве (правила часовых поясов локали могут меняться по многим причинам, а не только DST).

var timestamp= Date.UTC(2010, 10-1, 31, 0, 0, 0); // zero-based month: 9->october
var nextday= new Date(timestamp+86400000); // add one day
var ymd= [
    nextday.getUTCFullYear(),
    nextday.getUTCMonth()+1, // zero-based month
    nextday.getUTCDate()
].join('-');
alert(ymd); // 2010-11-1

Если это было сделано с помощью new Date(2010, ...) и getDate() и т.д., оно вернет 2010-10-31, добавление дня приведет к сбою из-за изменения DST (в моем регионе, так или иначе).

Жаль, что "наиболее очевидные методы по умолчанию в Date относятся к местному времени, тем более, что JavaScript предоставляет очень мало контекста сценариям, что на самом деле является местным временем. UTC - более стабильное предложение.

Ответ 2

Используйте Date.setHours(hour,min,sec,millisec), чтобы установить час по умолчанию в полдень: Date.setHours(11); (посмотреть ссылку)

Через 24 часа после полудня на день, как ожидается, на следующий день, хотя в летнее время он будет на один час (что вообще не изменяет результат в вашем script).