Добавить день через date-fns с учетом изменения часового пояса - PullRequest
0 голосов
/ 07 апреля 2019

В моем проекте я использую date-fns для манипуляций с датами.Существует необходимость повторять дни в некотором диапазоне.Для этого я использую следующий код:

  for (
    // from and to are always start of some day, from <= to
    let date = from;
    isBefore(date, to) || isEqual(date, to);
    date = addDays(date, 1)
  ) {
    // Some operations with date
  }

Я ожидаю, что date всегда будет началом какого-то дня, но в случае изменения часового пояса (зимнее время -> летнее время) дата будетНа 1 час меньше, чем ожидалось.Вот пример:

const from = new Date('2019-03-31T00:00:00.000Z')
const fromPlusDay = dateFns.addDays(from, 1)

// I'm getting "2019-03-31T23:00:00.000Z"
// instead of "2019-04-01T00:00:00.000Z"
fromPlusDay.toISOString()

Кстати, мой часовой пояс был +2, а после перехода на летнее время он стал + 3

1 Ответ

0 голосов
/ 17 апреля 2019

Это равно с учетом изменения часового пояса, и оно i с в начале дня (в вашем часовом поясе, а не в UTC). Полночь в UTC не обязательно является началом дня в вашей зоне.

Проверьте это (я в GMT + 1 зона):

const from = dateFns.parse('2019-03-31') // -> "2019-03-31T00:00:00.000+0100"
const fromPlusDay = dateFns.addDays(from, 1)

dateFns.format(fromPlusDay , 'YYYY-MM-DDTHH:mm:ss.SSSZZ') // -> "2019-04-01T00:00:00.000+0200"

Я думаю, что вы делаете хорошо, только не ожидайте, что ваша зона будет 00:00 в UTC, и избегайте печати дат в UTC.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...