Даты Javascript работают с часовыми поясами.Если я создаю дату, она устанавливает часовой пояс.Когда я обновляю год этой даты, я не ожидаю, что часовой пояс изменится.Это делает, однако.Хуже всего то, что это меняет часовой пояс, но не время, приводя к смещению фактического времени на один час!
Это вызывает проблему, что если у меня есть дата рождения человека, и я хочу знать его день рождения, то этоyear, я не могу просто установить год для текущего года, используя birthdate.setFullYear(2018)
, потому что он вернет день рождения минус один час.Это означает, что это происходит за один день до фактического дня рождения, в одиннадцать часов.
let test = new Date('1990-10-20');
console.log(test);
console.log(test.toISOString().substring(0, 10));
// 1990-10-20 ( Sat Oct 20 1990 01:00:00 GMT+0100 (Central European Standard Time) )
test.setFullYear(2000);
console.log(test);
console.log(test.toISOString().substring(0, 10));
// 2000-10-19 ( Fri Oct 20 2000 01:00:00 GMT+0200 (Central European Summer Time) === one hour too soon!! )
Возможно, ваш часовой пояс не воспроизводится, вот мой вывод:
"1990-10-20T00: 00: 00.000Z"
1990-10-20
" 2000-10-19T23: 00: 00.000Z "
2000-10-19
Единственный обходной путь, который я нашел, - это подставить дату и заменить ее как строковые значения.Как я могу сделать это лучше, используя объект Date?