🧱 Суть

В JavaScript дата внутри объекта Date хранится не как строка, а как количество миллисекунд с 1 января 1970 года.
Это называется Unix эпоха.

Например:

new Date(0);

Результат:

Thu Jan 01 1970 00:00:00 GMT+0000

Внутри:

0 миллисекунд от начала эпохи

То есть:

Date
 ↓
миллисекунды
 ↓
отображение даты

📦 Проблема

Часто кажется, что JavaScript хранит дату как:

"2025-04-08"

Но это только формат отображения.

Реально:

Date → число → форматирование

Поэтому разные записи могут обозначать один момент времени:

1712563200000
"2025-04-08T00:00:00.000Z"

💻 Код

Получить текущее время:

Date.now();

Результат:

миллисекунды

Например:

1712563200000

Получить Unix timestamp:

Math.floor(Date.now() / 1000);

Результат:

секунды

Что можно передать в Date

Миллисекунды:

new Date(0);

ISO строку:

new Date('2025-04-08');

Отдельные значения:

new Date(2025, 3, 8);

Важно:

0 – январь
1 – февраль
2 – март
3 – апрель

Месяцы начинаются с нуля.

🎯 Вывод

  • Date внутри хранит число миллисекунд.
  • Unix timestamp обычно хранится в секундах.
  • ISO и локальные даты – это только представление.
  • Для вычислений лучше использовать timestamp или объект Date.

🔗 Связано