Работа с датами и временем в JavaScript: полное руководство для Node.js

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Работа с датами и временем в JavaScript (Node.js): от основ до продвинутых техник

Работа с датами и временем — одна из самых частых задач в веб-разработке. Будь то логирование событий, обработка пользовательских данных, планирование задач или отображение временных меток — без умения управлять датами в JavaScript не обойтись. В этой статье мы разберем все ключевые аспекты работы с датами в среде Node.js: от создания и форматирования до сложных манипуляций с часовыми поясами и использования популярных библиотек.

Основы: объект Date в JavaScript

Встроенный объект Date — фундамент для работы с датами. Он хранит количество миллисекунд, прошедших с 1 января 1970 года (Unix-эпоха).

Создание даты

Существует несколько способов создания экземпляра Date:

// Текущая дата и время
const now = new Date();
console.log(now); // 2025-03-15T10:30:00.000Z

// Из миллисекунд (Unix timestamp)
const fromTimestamp = new Date(1742025000000);
console.log(fromTimestamp); // 2025-03-15T10:30:00.000Z

// Из строки (ISO 8601)
const fromString = new Date('2025-03-15T10:30:00');
console.log(fromString);

// Из компонентов (год, месяц, день, час, минута, секунда, миллисекунда)
const fromComponents = new Date(2025, 2, 15, 10, 30, 0, 0); // Месяцы: 0-11
console.log(fromComponents); // March 15, 2025 10:30:00

Важно: месяцы в JavaScript нумеруются с 0 (январь — 0, декабрь — 11).

Получение компонентов даты

Методы для извлечения отдельных частей даты:

const date = new Date('2025-03-15T10:30:45.123Z');

console.log(date.getFullYear());    // 2025
console.log(date.getMonth());       // 2 (март)
console.log(date.getDate());        // 15
console.log(date.getDay());         // 6 (суббота, 0 - воскресенье)
console.log(date.getHours());       // 10
console.log(date.getMinutes());     // 30
console.log(date.getSeconds());     // 45
console.log(date.getMilliseconds());// 123
console.log(date.getTime());        // миллисекунды с эпохи

Форматирование дат в Node.js

Стандартный Date предоставляет ограниченные возможности форматирования. Для вывода в читаемом виде используйте toLocaleDateString() и toLocaleString().

const date = new Date('2025-03-15T10:30:00');

// Локализованное форматирование
console.log(date.toLocaleDateString('ru-RU')); // 15.03.2025
console.log(date.toLocaleTimeString('ru-RU')); // 10:30:00
console.log(date.toLocaleString('ru-RU'));     // 15.03.2025, 10:30:00

// С опциями
const options = {
  year: 'numeric',
  month: 'long',
  day: 'numeric',
  weekday: 'long',
  hour: '2-digit',
  minute: '2-digit'
};
console.log(date.toLocaleString('ru-RU', options)); 
// суббота, 15 марта 2025 г., 10:30

Кастомное форматирование

Для полного контроля напишите простую функцию:

function formatDate(date, format = 'YYYY-MM-DD HH:mm:ss') {
  const map = {
    YYYY: date.getFullYear(),
    MM: String(date.getMonth() + 1).padStart(2, '0'),
    DD: String(date.getDate()).padStart(2, '0'),
    HH: String(date.getHours()).padStart(2, '0'),
    mm: String(date.getMinutes()).padStart(2, '0'),
    ss: String(date.getSeconds()).padStart(2, '0'),
  };
  return format.replace(/YYYY|MM|DD|HH|mm|ss/g, match => map[match]);
}

console.log(formatDate(new Date(), 'DD.MM.YYYY')); // 15.03.2025
console.log(formatDate(new Date(), 'HH:mm:ss'));   // 10:30:00

Манипуляции с датами: добавление, вычитание, сравнение

Изменять даты можно напрямую через методы set* или работая с миллисекундами.

Добавление и вычитание времени

const date = new Date('2025-03-15T10:30:00');

// Добавить 5 дней
date.setDate(date.getDate() + 5);
console.log(date); // 2025-03-20T10:30:00

// Добавить 2 часа
date.setHours(date.getHours() + 2);
console.log(date); // 2025-03-20T12:30:00

// Вычесть 30 минут
date.setMinutes(date.getMinutes() - 30);
console.log(date); // 2025-03-20T12:00:00

// Через миллисекунды (добавить 1 неделю)
const oneWeek = 7 * 24 * 60 * 60 * 1000;
const newDate = new Date(date.getTime() + oneWeek);
console.log(newDate); // 2025-03-27T12:00:00

Сравнение дат

Даты можно сравнивать как числа (через getTime()) или напрямую операторами:

const date1 = new Date('2025-03-15');
const date2 = new Date('2025-03-20');

console.log(date1 < date2);  // true
console.log(date1 > date2);  // false
console.log(date1.getTime() === date2.getTime()); // false

// Разница в днях
const diffMs = date2 - date1;
const diffDays = diffMs / (1000 * 60 * 60 * 24);
console.log(diffDays); // 5

// Проверка на одинаковую дату (без времени)
function isSameDay(d1, d2) {
  return d1.getFullYear() === d2.getFullYear() &&
         d1.getMonth() === d2.getMonth() &&
         d1.getDate() === d2.getDate();
}
console.log(isSameDay(date1, date2)); // false

Работа с часовыми поясами в Node.js

По умолчанию Date работает в локальном часовом поясе сервера. Для работы с UTC используйте методы getUTC* и setUTC*.

const date = new Date('2025-03-15T10:30:00+03:00'); // Московское время

console.log(date.getHours());        // 10 (локальное время сервера                

Блоги

Рекомендаций по книгам