Объект `Date`
В этой статье объясняется объект Date.
Мы поэтапно объясним объект Date — от базовых механизмов до часто используемых операций на практике, с конкретными примерами.
YouTube Video
Объект Date
Что такое объект Date?
Объект Date в JavaScript — это стандартный объект для работы с датой и временем. Внутри он управляет датой и временем на основе количества миллисекунд, прошедших с 1 января 1970 года, 00:00:00 UTC.
Сначала давайте создадим объект Date, представляющий текущую дату и время, и проверим его содержимое.
1const now = new Date();
2console.log(now);- Этот код создает объект
Date, который представляет текущую дату и время на момент выполнения. Формат отображения зависит от среды выполнения, например, браузера или операционной системы.
Как создать объект Date
Объекты Date можно создавать различными способами в зависимости от ваших потребностей. Особо важный момент, в котором легко ошибиться — аргумент конструктора для месяца отсчитывается с нуля, то есть месяцы начинаются с 0.
1const d1 = new Date(); // Current date and time
2const d2 = new Date("2025-01-01"); // Create from an ISO date string
3const d3 = new Date(2025, 0, 1); // January 1, 2025 (month is zero-based)
4const d4 = new Date(2025, 0, 1, 10, 30); // January 1, 2025, 10:30
5
6console.log(d1, d2, d3, d4);- В
new Date(year, month, day)аргументmonthозначает, что0— это январь, а11— декабрь. Если не понимать этой особенности, можно случайно создать дату, отличающуюся на один месяц, поэтому всегда будьте внимательны.
Получение отдельных элементов даты и времени
Из объекта Date можно отдельно получить год, месяц, день, время и день недели. Все методы получения возвращают значения в виде чисел.
1const date = new Date();
2
3console.log(date.getFullYear()); // Year
4console.log(date.getMonth()); // Month (0-based: 0 = January)
5console.log(date.getDate()); // Day of the month
6console.log(date.getHours()); // Hours
7console.log(date.getMinutes()); // Minutes
8console.log(date.getSeconds()); // Seconds
9console.log(date.getDay()); // Day of the week (0 = Sunday, 6 = Saturday)
- Как и при создании, имейте в виду, что
getMonth()также отсчитывается с нуля. При выводе обычно добавляют 1 к значению для корректного отображения месяца. getDay()возвращает день недели в виде числа. 0 означает воскресенье, а 6 — субботу.
Изменение даты и времени
Объект Date является изменяемым, то есть его значения можно изменить позднее. Это свойство удобно, но нужно быть осторожным с нежелательными побочными эффектами.
Вы можете использовать методы set для изменения значений существующего объекта Date.
1const date = new Date("2025-01-01");
2
3date.setFullYear(2026);
4date.setMonth(5); // June
5date.setDate(15);
6
7console.log(date);setMonth()также воспринимает месяцы с нуля. Исходный объект изменяется напрямую.
Сложение и вычитание дат
Вычисления с датами обычно выполняются с помощью миллисекунд или метода setDate(). Для вычислений по дням использование setDate() особенно интуитивно и безопасно.
1const date = new Date("2025-01-01");
2
3date.setDate(date.getDate() + 7);
4console.log(date);- В этом примере мы вычисляем дату, которая наступит через 7 дней после указанной. Даже если прибавление пересекает границу месяца, дата автоматически корректируется.
Сравнение объектов Date
Объекты Date можно сравнивать как числа. Это связано с тем, что сравниваются внутренние значения в миллисекундах.
1const a = new Date("2025-01-01");
2const b = new Date("2025-01-10");
3
4console.log(a < b); // true
5console.log(a > b); // false
- Если нужно определить порядок дат, никакое дополнительное преобразование не требуется. Можно напрямую использовать операторы сравнения.
Работа с метками времени (миллисекунды)
Date можно конвертировать в числа, представляющие миллисекунды (метки времени), и обратно. Этот формат часто используется в API и интеграциях с базами данных.
1const now = Date.now();
2console.log(now);
3
4const date = new Date(now);
5console.log(date);Date.now()возвращает текущее время в миллисекундах. Это очень удобно, когда нужно сохранить или сравнить значение как число.
Форматирование дат в строки
Отображение объекта Date как есть часто приводит к формату, который может не соответствовать вашим нуждам. Поэтому следует явно форматировать дату в соответствии с вашими требованиями.
1const date = new Date("2025-01-01");
2
3const formatted = `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`;
4console.log(formatted);- При ручном форматировании вы получаете полный контроль над форматом отображения. На практике для этого часто используются библиотеки.
Разница между UTC и локальным временем
Объект Date предоставляет методы для работы как с локальным временем, так и с UTC. Очень важно правильно понимать эту разницу для интеграции с сервером и обеспечения международной совместимости.
1const date = new Date();
2
3console.log(date.getHours()); // Local time (hours)
4console.log(date.getUTCHours()); // UTC time (hours)
- Методы
getUTC*всегда возвращают значения по UTC. Будьте особо внимательны при работе с данными в разных временных зонах.
Меры предосторожности при использовании объектов Date
Date — удобный объект, но у него есть свои подводные камни. В частности, отсчет месяцев с нуля и изменяемость объекта являются частыми причинами ошибок.
Давайте рассмотрим конкретные примеры ниже, чтобы увидеть, как изменяемость объекта Date влияет на его поведение.
1const original = new Date("2025-01-01");
2const copy = new Date(original);
3
4copy.setDate(10);
5
6console.log(original);
7console.log(copy);- Если хотите сохранить исходную дату и время, всегда создавайте копию. Просто осознание этого момента поможет избежать неожиданных ошибок.
Причины, по которым с объектом Date сложно работать, и критерии выбора сторонних библиотек.
Объект Date предоставляет достаточно функций как стандартное средство, но на практике бывают ситуации, когда его использование оказывается затруднительным. К типичным проблемам относятся: отсчет месяцев и дней недели с нуля, частое путаница между местным временем и UTC, а также изменяемость объекта. Эти проблемы могут привести к увеличению количества ошибок при усложнении обработки дат.
Date достаточно для простого получения и сравнения дат, но при усложнении вычислений или форматировании отображения читаемость и сопровождаемость кода ухудшаются.
Если у вас есть следующие требования, рекомендуется рассмотреть использование легковесных библиотек для работы с датами, таких как dayjs или date-fns.
- Вам необходимо явно работать с часовыми поясами.
- Вам часто требуется выполнять вычисления с датами или интервалами.
- Вам требуется гибко изменять формат отображения.
- Вам нужно работать с датами и временем неизменяемо.
Резюме
Объекты Date — это основной инструмент для работы с датой и временем в JavaScript. Понимая его особенности и правильно создавая, извлекая, вычисляя и форматируя даты, вы сможете безопасно использовать Date на практике.
Освоив основы, целесообразно использовать сторонние библиотеки для работы с датами в случае необходимости.
Вы можете следовать этой статье, используя Visual Studio Code на нашем YouTube-канале. Пожалуйста, также посмотрите наш YouTube-канал.