#javascript #date
#javascript #Дата
Вопрос:
Пожалуйста, помогите мне понять несоответствие ожидаемого результата реальности, когда я пытаюсь увеличить год для даты с помощью .setFullYear()
(или .setUTCFullYear()
— тот же результат).
Настройка:
let timestamp = '2010-10-12T12:00:00Z';
const initialDate = new Date(timestamp);
const resultingDate = new Date(initialDate.setFullYear(2020));
console.log('timestamp : ' timestamp);
console.log('initialDate : ' initialDate.toISOString())
console.log('resultingDate: ' resultingDate.toISOString())
Ожидания:
expect(resultingDate).toEqual(new Date('2020-10-12T12:00:00Z'));
Реальность:
resultingDate === new Date('2020-10-12T13:00:00Z')
Вопрос:
Как, черт возьми, я получил увеличение результата на один час? Я устанавливаю только годы. Или я?
Комментарии:
1. Не знаю о дополнительном 1 часе, но, к вашему сведению
setFullYear
, видоизменяетinitialDate
. Таким образом, вашinitialDate
должен быть равенresultingDate
. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference /…2. Спасибо, я знаю. Основное внимание в этой истории уделяется полученному «13» вместо «12». Если я сотру время (на
new Date(new Date(dateStart).toISOString().substr(0,10))
) — результат станет...T01:00...
выигрышем в один час — откуда он берется?3. Вы не можете сравнивать такие даты. Что, если вы печатаете
initialDate
, у этого также есть 1 час?4. Обновление: если
initialDate
год 2015, 2016, 2017, 2018 и т. Д., То Установка на 2020 не влияет на время. Однако, если год 2014 и ниже (2013, 2012 и т. Д.), То Эта операция увеличивает время на 1 час.5. Нет, это не так… но я не в том же часовом поясе, что и вы — были ли изменения летнего времени в вашем часовом поясе?
Ответ №1:
Проблема связана с тем, что произошло с московским временем в 2014 году. Смотрите: Часовой пояс Москвы
Фактически, Москва изменилась с UTC 4 на UTC 3 26/10/2014. Итак, 10.12.2010, 16:00 по Москве было 12:00 по времени UTC. Но с 2015 года 16:00 по Москве было 13:00 по времени UTC. Итак, даты до 2014 года будут показывать 12:00, а даты после этого будут показывать 13:00.
Комментарии:
1. Вы можете попробовать использовать Date.UTC(…) для построения вашей даты, поскольку это не ссылается на местное часовое пояснение.