Unix Epoch — это точка отсчёта времени, принятого в вычислительной технике: 00:00:00 UTC 1 января 1970 года. В JavaScript и Moment.js время часто представлено в виде числа миллисекунд, прошедших с этого момента. Определение того, находится ли дата до или после Unix Epoch, играет ключевую роль при работе с историческими данными, таймштампами и синхронизацией с внешними API.
В Moment.js для создания объекта даты используется функция
moment():
const date = moment('1969-12-31T23:59:59Z');
const date = moment([1969, 11, 31, 23, 59, 59]); // Год, месяц (0-11), день, часы, минуты, секунды
Важный момент: месяцы в Moment.js индексируются с нуля (0 — январь, 11 — декабрь).
Unix Epoch соответствует нулевому значению таймстампа (0
миллисекунд). Moment.js предоставляет методы для получения количества
миллисекунд с Epoch:
const timestamp = date.valueOf();
timestamp — отрицательное число, если дата до 1 января
1970 года.Пример:
const beforeEpoch = moment('1969-12-31T23:59:59Z');
const afterEpoch = moment('1970-01-01T00:00:01Z');
console.log(beforeEpoch.valueOf() < 0); // true
console.log(afterEpoch.valueOf() > 0); // true
isBefore и isAfterMoment.js имеет встроенные методы для сравнения дат:
beforeEpoch.isBefore(moment(0)); // true
afterEpoch.isAfter(moment(0)); // true
moment(0) создаёт объект Moment, соответствующий точке
Unix Epoch.При работе с датами до Unix Epoch особенно важно учитывать часовой пояс:
const utcDate = moment.utc('1969-12-31T23:00:00Z');
const localDate = moment('1969-12-31T23:00:00');
moment.utc() создаёт объект в UTC, игнорируя локальный
смещение.utc() Moment интерпретирует время в локальном
часовом поясе, что может изменить результат проверки относительно
Epoch:console.log(utcDate.valueOf() < 0); // true
console.log(localDate.valueOf() < 0); // зависит от часового пояса
Если необходимо сравнивать даты с Epoch независимо от часового пояса,
рекомендуется использовать метод .utc():
const date = moment('1969-12-31T23:59:59').utc();
if (date.isBefore(moment(0))) {
console.log('Дата до Unix Epoch');
} else {
console.log('Дата после Unix Epoch');
}
Метод .valueOf() после .utc() даст
корректный отрицательный или положительный таймстамп.
Можно объединять проверку Unix Epoch с другими условиями:
const now = moment();
const historicalDate = moment('1965-06-15');
if (historicalDate.isBefore(moment(0))) {
console.log('Дата историческая (до Epoch)');
}
if (historicalDate.isBefore(now)) {
console.log('Дата в прошлом относительно текущего момента');
}
Такой подход позволяет гибко фильтровать данные: исторические события до Epoch, современные и будущие даты.
.add(), .subtract() и
.diff() работают с отрицательными датами так же, как с
положительными.moment(-1000000000).format('YYYY-MM-DD HH:mm:ss'); // "1969-12-20 10:13:20"
moment('1969-12-31T23:59:59Z') или
moment([1969, 11, 31, 23, 59, 59]).date.valueOf(). Отрицательное
значение → до Epoch, положительное → после.date.isBefore(moment(0)) или
date.isAfter(moment(0)).date.utc().Это позволяет уверенно работать с датами как до, так и после Unix Epoch, обеспечивая корректные вычисления, сортировку и фильтрацию исторических и современных данных.