Даты и время в JS
что такое объект Date
Что важно понять?
В объекте date мы не можем разделить дату и время — это единая сущность. Нельзя просто так взять и задать только время без даты.Почему?
Потому что внутри объекта записано количество миллисекунд, которое преобразуется в «человеческий» формат с помощью чёртовой матери магии.Про магию и почему важно использовать объект Date в программировании
let Jan02_1970 = new Date(24 * 60 * 60 * 1000); //получим 02.01.1970 UTC+0
или этого
const milliseconds = 31449600000;
let days = milliseconds / (1000 * 60 * 60 * 24)//получим 364 дня
и кажется, что ну вот же всё просто: бери и переводи миллисекунды в дни/часы/месяцы. Зачем же тогда вообще нужен специальный объект для работы со временем?
Но кроме очевидных високосных годов и переводов часов на летнее время, существуют ситуации,
когда сутки становятся длиннее на секунду. А если возникает необходимость работы с историческими датами, можно вспомнить историю о том, как в 1908 сборная России опоздала на Олимпиаду из-за того, что Россия на тот момент ещё пользовалась юлианским календарем, в то время как Англия уже перешла на григорианский.
Как раз все эти нюансы учтены внутри объекта Date, чтобы мы могли получить верную дату.
Как создать объект Date
создаём Date с текущей датой и временем:
const now = new Date();
console.log(nowDate);
//
Далее создадим одну и ту же дату тремя разными способами
создаём Date с переданным значением времени. Значение должно быть совместимым с IETF RFC 2822 или с ISO8601:
const fromString = new Date('June 30, 2016 01:57:16');
console.log(fromString);
//
создаём объект Date с временем, равным количеству миллисекунд (тысячная доля секунды), прошедших с 1 января 1970 года UTC+0:
const fromMiliseconds = new Date(1467295036000);
console.log(fromMiliseconds);
//
создаём объект Date с заданными параметрами (год, месяц, день, часы, минуты, секунды, миллисекунды) в местном часовом поясе. Обязательны только первые два аргумента. Остальные параметры, начиная с часов, будут по умолчанию равны 0, а день — 1:
const fromParameters = new Date(2016, 5, 30, 1, 57, 16);
console.log(fromParameters);
//
Методы работы с датой
const currentDate = new Date('August 14, 2022 14:15:30')
console.log(currentDate.getTime()) // 1660475730000
console.log(currentDate.getFullYear()) // 2022
console.log(currentDate.getMonth()) // 0
console.log(currentDate.getDate()) // 0
console.log(currentDate.getDay()) // 0
console.log(currentDate.getHours()) // 0
console.log(currentDate.getMinutes()) // 0
console.log(currentDate.getSeconds()) // 0
console.log(currentDate.getMilliseconds()) // 0
console.log(currentDate.getTimezoneOffset()) // 14
console.log(currentDate.toISOString()) // 2022-08-14T11:15:30.000Z
а ещё
С датами можно производить математические операции. Главное помнить, что мы просто складываем или вычитаем количество миллисекунд! Поэтому если вы заранее не привели ваши даты к utc формату, то результат может быть некорректным.
Ещё очень важная и крутая возможность — это автоисправление даты. Можно задать 32 декабря и оно превратится в 1 января.
const newDate = new Date(2022, 11, 32);
// 2023-01-01