Это важная тема, ведь почти каждое приложение так или иначе взаимодействует с датами, от отображения текущего времени до расчета дедлайнов или анализа данных. В этом уроке я подробно расскажу об объекте Date
, форматировании дат и вычислении временных промежутков. А чтобы закрепить знания, вас ждут практические задачи и примеры кода.
Объект Date
В JavaScript все операции с датами и временем выполняются через объект Date
. Он позволяет создавать, изменять и форматировать даты. Давайте разберемся, как он работает.
Создание объекта Date
Объект Date
можно создать несколькими способами:
1. Текущая дата и время
Если вызвать конструктор new Date()
без аргументов, он вернет текущие дату и время:
const now = new Date(); console.log(now); // Пример вывода: 2025-10-15T14:20:30.000Z
2. Дата из строки
Можно передать строку в формате, который понимает JavaScript:
const dateStr = new Date('2025-10-15T14:20:30'); console.log(dateStr); // 2025-10-15T14:20:30.000Z
3. Дата из чисел
Конструктор принимает до 7 аргументов: год, месяц, день, часы, минуты, секунды, миллисекунды.
Месяцы нумеруются с 0 (январь) до 11 (декабрь)!
const dateNum = new Date(2025, 9, 15, 14, 20, 30); // 15 октября 2025, 14:20:30 console.log(dateNum); // 2025-10-15T11:20:30.000Z (UTC+0)
Методы объекта Date
Объект Date
содержит множество методов для получения и установки компонентов даты. Вот ключевые из них:
Метод | Описание | Пример для 2025-10-15 14:20:30 |
---|---|---|
getFullYear() |
Год (4 цифры) | 2025 |
getMonth() |
Месяц (0-11) | 9 (октябрь) |
getDate() |
День месяца (1-31) | 15 |
getHours() |
Часы (0-23) | 14 |
getMinutes() |
Минуты (0-59) | 20 |
getSeconds() |
Секунды (0-59) | 30 |
getMilliseconds() |
Миллисекунды (0-999) | 0 |
getDay() |
День недели (0-6, 0=воскресенье) | 0 (15 октября 2025 — воскресенье) |
Пример:
const date = new Date(2025, 9, 15); console.log(date.getFullYear()); // 2025 console.log(date.getMonth()); // 9 (октябрь) console.log(date.getDate()); // 15
UTC или локальное время
JavaScript работает с датами в двух режимах: локальном (зависит от часового пояса пользователя) и UTC (всемирное координированное время). Для получения UTC-значений используйте методы с префиксом getUTC
:
const date = new Date(); console.log(date.getHours()); // Локальные часы console.log(date.getUTCHours()); // Часы по UTC
Форматирование дат
К сожалению, в JavaScript нет встроенной функции для красивого форматирования дат, но мы можем собрать строку вручную или использовать библиотеки.
Ручное форматирование
Соберем дату в формате дд.мм.гггг
:
function formatDate(date) { const day = String(date.getDate()).padStart(2, '0'); const month = String(date.getMonth() + 1).padStart(2, '0'); const year = date.getFullYear(); return `${day}.${month}.${year}`; } const today = new Date(); console.log(formatDate(today)); // 15.10.2025
Использование toLocaleDateString()
Этот метод возвращает локализованную строку даты:
const date = new Date(); console.log(date.toLocaleDateString('ru-RU')); // 15.10.2025 console.log(date.toLocaleDateString('en-US')); // 10/15/2025
Параметры:
date.toLocaleDateString('ru-RU', { weekday: 'long', // "воскресенье" year: 'numeric', month: 'long', // "октябрь" day: 'numeric' }); // "15 октября 2025 г."
Вычисление временных промежутков
Часто нужно рассчитать разницу между датами. В JavaScript это делается через разницу в миллисекундах.
Разница между датами
const start = new Date(2025, 9, 1); // 1 октября 2025 const end = new Date(2025, 9, 15); // 15 октября 2025 const diffMs = end - start; // Разница в миллисекундах const diffDays = diffMs / (1000 * 60 * 60 * 24); console.log(diffDays); // 14 дней
Добавление и вычитание времени
Используйте методы setXXX()
, например:
const date = new Date(); date.setDate(date.getDate() + 7); // Добавить 7 дней console.log(date); // Через неделю
Пример функции для добавления дней:
function addDays(date, days) { const result = new Date(date); result.setDate(result.getDate() + days); return result; } const now = new Date(); console.log(addDays(now, 10)); // Дата + 10 дней
Практические задачи
Закрепим знания на практике! Решите задачи и сверьтесь с решениями.
Задача 1: Текущая дата в формате «гггг-мм-дд»
Напишите функцию, которая возвращает текущую дату в формате гггг-мм-дд
.
Решение:
function getCurrentDate() { const date = new Date(); const year = date.getFullYear(); const month = String(date.getMonth() + 1).padStart(2, '0'); const day = String(date.getDate()).padStart(2, '0'); return `${year}-${month}-${day}`; } console.log(getCurrentDate()); // 2025-10-15
Задача 2: Калькулятор возраста
Напишите функцию, которая принимает дату рождения и возвращает возраст человека.
Решение:
function calculateAge(birthDate) { const today = new Date(); const birthYear = birthDate.getFullYear(); const currentYear = today.getFullYear(); let age = currentYear - birthYear; // Проверяем, был ли уже день рождения в этом году const birthMonth = birthDate.getMonth(); const currentMonth = today.getMonth(); if ( currentMonth < birthMonth || (currentMonth === birthMonth && today.getDate() < birthDate.getDate()) ) { age--; } return age; } const birthDate = new Date(1990, 5, 15); console.log(calculateAge(birthDate)); // Например, 33
Задача 3: Таймер до Нового года
Напишите код, который выводит, сколько дней, часов и минут осталось до Нового года.
Решение:
function timeUntilNewYear() { const now = new Date(); const newYear = new Date(now.getFullYear() + 1, 0, 1); // 1 января следующего года const diffMs = newYear - now; const days = Math.floor(diffMs / (1000 * 60 * 60 * 24)); const hours = Math.floor((diffMs % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)); const minutes = Math.floor((diffMs % (1000 * 60 * 60)) / (1000 * 60)); return `${days} дней, ${hours} часов, ${minutes} минут`; } console.log(timeUntilNewYear());
Советы и частые ошибки
- Месяцы начинаются с 0. Всегда добавляйте 1 к результату
getMonth()
. - Временные зоны. Учитывайте, что методы
getXXX()
возвращают локальное время, аgetUTCXXX()
UTC. - Високосные годы. При расчете промежутков используйте проверенные библиотеки для сложных вычислений.
Полный курс «JavaScript для начинающих» доступен здесь: https://max-gabov.ru/javascript-dlya-nachinaushih