Unix-время (Unix Timestamp) — это количество секунд, прошедших с полуночи 1 января 1970 года по UTC. Такой формат широко используется в базах данных, API, логах, системах авторизации, файловых системах и сетевых протоколах.
Пример Unix-времени:
1716288000
Это число представляет конкретную дату и время.
Библиотека Moment.js предоставляет удобные методы для создания объектов даты из Unix-времени и обратного преобразования.
moment.unix()Для создания даты из Unix Timestamp используется метод
moment.unix().
moment.unix(timestamp)
Параметр timestamp должен содержать количество
секунд.
const moment = require('moment');
const date = moment.unix(1716288000);
console.log(date.format('YYYY-MM-DD HH:mm:ss'));
Результат:
2024-05-21 00:00:00
В JavaScript объект Date использует миллисекунды:
Date.now()
Пример результата:
1716288000000
В Unix Timestamp используются секунды:
1716288000
Разница критически важна.
moment.unix(1716288000000)
Результат окажется некорректным, потому что библиотека воспримет число как секунды.
Если имеется timestamp в миллисекундах, используется обычный вызов
moment():
const date = moment(1716288000000);
console.log(date.format('YYYY-MM-DD HH:mm:ss'));
moment.unix(1716288000)
moment(1716288000000)
Метод moment.unix() фактически преобразует секунды в
миллисекунды:
moment(timestamp * 1000)
Эквивалентный код:
const date = moment(1716288000 * 1000);
После создания объекта доступны все методы форматирования.
moment.unix(1716288000).format('YYYY-MM-DD')
Результат:
2024-05-21
moment.unix(1716288000).format('HH:mm:ss')
moment.unix(1716288000).format('DD.MM.YYYY HH:mm')
Unix-время всегда основано на UTC.
const date = moment.unix(1716288000).utc();
console.log(date.format());
moment.unix(1716288000).format()
moment.unix(1716288000).utc().format()
Разница зависит от часового пояса системы.
Для обратного преобразования используется метод
unix().
const date = moment('2024-05-21');
console.log(date.unix());
Результат:
1716249600
unix()
и valueOf()unix()Возвращает секунды:
moment().unix()
valueOf()Возвращает миллисекунды:
moment().valueOf()
const timestamp = moment().unix();
console.log(timestamp);
const timestamp = moment().valueOf();
Unix Timestamp должен быть числом.
const timestamp = 1716288000;
if (typeof timestamp === 'number') {
const date = moment.unix(timestamp);
console.log(date.format());
}
Многие API возвращают Unix-время строкой.
const timestamp = '1716288000';
const date = moment.unix(Number(timestamp));
console.log(date.format());
Unix-время часто приходит от серверов.
{
"created_at": 1716288000
}
const response = {
created_at: 1716288000
};
const created = moment.unix(response.created_at);
console.log(created.format('DD.MM.YYYY HH:mm:ss'));
Moment.js поддерживает даты до 1970 года.
const date = moment.unix(-1);
console.log(date.format());
Результат:
1969-12-31T23:59:59+00:00
После создания даты можно выполнять арифметические операции.
const date = moment.unix(1716288000)
.add(7, 'days');
console.log(date.format());
const date = moment.unix(1716288000)
.subtract(5, 'hours');
const a = moment.unix(1716288000);
const b = moment.unix(1716288000);
console.log(a.isSame(b));
const a = moment.unix(1716288000);
const b = moment.unix(1716374400);
console.log(a.isBefore(b));
const start = moment.unix(1716288000);
const end = moment.unix(1716374400);
console.log(end.diff(start, 'days'));
Результат:
1
const timestamps = [
1716288000,
1716374400,
1716460800
];
const dates = timestamps.map(ts => {
return moment.unix(ts).format('YYYY-MM-DD');
});
console.log(dates);
Unix Timestamp удобно использовать для сортировки.
const timestamps = [
1716460800,
1716288000,
1716374400
];
timestamps.sort((a, b) => a - b);
console.log(timestamps);
Во многих системах Unix-время хранится как INTEGER.
created_at INTEGER
const createdAt = 1716288000;
const date = moment.unix(createdAt);
console.log(date.format());
moment.unix()Неправильно:
moment.unix(1716288000000)
Правильно:
moment(1716288000000)
Неправильно:
moment.unix(timestamp)
Правильно для UTC:
moment.unix(timestamp).utc()
Нежелательно:
moment.unix('1716288000')
Лучше:
moment.unix(Number('1716288000'))
Unix Timestamp имеет несколько преимуществ:
const logs = [
{
id: 1,
time: 1716288000
},
{
id: 2,
time: 1716374400
}
];
logs.forEach(log => {
const date = moment.unix(log.time);
console.log(
`Событие ${log.id}: ${date.format('DD.MM.YYYY HH:mm:ss')}`
);
});
const expiresAt = 1716374400;
const now = moment().unix();
if (now > expiresAt) {
console.log('Срок истёк');
} else {
console.log('Активно');
}
const createdAt = 1716200000;
const created = moment.unix(createdAt);
const days = moment().diff(created, 'days');
console.log(days);
При подключении плагина Moment Timezone становится доступна работа с часовыми поясами.
const date = moment.unix(1716288000)
.tz('Europe/Moscow');
console.log(date.format());
const date = moment.unix(1716288000);
console.log(date.fromNow());
Возможный результат:
2 days ago
const start = moment.unix(1716288000);
const end = moment.unix(1716374400);
while (start.isBefore(end)) {
console.log(start.format('YYYY-MM-DD'));
start.add(1, 'day');
}
const date = moment.unix(1716288000);
console.log(date.isValid());
const date = moment.unix(1716288000).toDate();
console.log(date);
const iso = moment.unix(1716288000).toISOString();
console.log(iso);
npm install moment
const moment = require('moment');
<script src="moment.min.js"></script>
const date = moment.unix(1716288000);
console.log(date.format());
Unix-время особенно полезно в следующих случаях: