Ответ 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 - более стабильное предложение.