Добавление недели к дате в JavaScript: ошибка округления или переход на летнее время? - PullRequest
2 голосов
/ 22 февраля 2011

Я пытаюсь добавить семь дней к объекту данных, однако на каком-то этапе я начинаю получать странные результаты.

var currDate = new Date(2011, 2, 28)
  , oldTicks = currDate.getTime()
  , newTicks = oldTicks + (86400000 * 7)
  , nextWeek = new Date(newTicks)
console.log('Old ticks: ' + oldTicks)
console.log('New ticks: ' + newTicks)
console.log('New date : ' + nextWeek)

Вывод, который я получаю, оба в Chrome / FF:

Old ticks: 1301230800000
New ticks: 1301835600000
log: New date : Sun Apr 03 2011 23:00:00 GMT+1000 (EST)

Ожидается получение:

log: New date : Mon Apr 04 2011 23:00:00 GMT+1000 (EST)

Как видите, вместо добавления 7 дней было добавлено всего 6.Однако приведенный выше код хорошо работает с другими датами, например, 28 апреля 2011 г. или 28 мая 2011 г.

Ответы [ 2 ]

5 голосов
/ 22 февраля 2011

Crescent Fresh - это правильная форма, которую я могу вывести. Поиск часовых поясов GMT+1000 (EST) выглядит как стандартное восточное время Австралии - из wikipedia - список часовых поясов по смещению UTC

А из wikipedia - дневная экономия времени по всему миру показывает, что Австралия переключается со стандартного на летнее время между диапазонами дат, указанными в ОП.

1 голос
/ 22 февраля 2011

Если бы это был я, я бы сделал:

var curDate = new Date(),

var aWeekLater = new Date(curDate.getFullYear(), curDate.getMonth(), curDate.getDate() + 7);

с некоторыми возможными настройками для времени суток.

Тем не менее, когда я пробую ваш код в консоли разработчика Chrome, я получаю 04 апреля в качестве ответа.

...