Instant представляет собой момент времени в UTC с
точностью до наносекунд, независимый от часовых поясов и календарных
систем. Модель ориентирована на абсолютную временную шкалу и
используется как базовый строительный блок для операций сравнения,
хранения и арифметики времени.
Instant.now()Возвращает текущий момент времени в UTC.
import { Instant } from 'js-joda';
const now = Instant.now();
Особенности:
Instant.ofEpochSecond(second, nanoAdjustment?)Создание Instant на основе секунд Unix epoch.
const i1 = Instant.ofEpochSecond(0);
const i2 = Instant.ofEpochSecond(1609459200, 500000000);
Параметры:
second — количество секунд с 1970-01-01T00:00:00ZnanoAdjustment — дополнительная корректировка в
наносекундахОсобенности:
Instant.ofEpochMilli(epochMilli)Создание момента времени из миллисекунд Unix epoch.
const instant = Instant.ofEpochMilli(1609459200000);
Особенности:
Date.now()Instant.parse(text)Парсинг строки в формате ISO-8601.
const instant = Instant.parse('2020-01-01T00:00:00Z');
Поддерживаемые форматы:
YYYY-MM-DDTHH:mm:ssZYYYY-MM-DDTHH:mm:ss.SSSZОсобенности:
Z)toEpochMilli()Возвращает количество миллисекунд с Unix epoch.
const millis = Instant.now().toEpochMilli();
Применение:
DategetEpochSecond()Возвращает количество секунд с Unix epoch.
const seconds = Instant.now().getEpochSecond();
Особенности:
getNano()Возвращает наносекундную часть секунды.
const nano = Instant.now().getNano();
Диапазон:
0 до 999_999_999Instant является неизменяемым объектом. Любая операция
возвращает новый экземпляр.
plusSeconds(seconds)const future = Instant.now().plusSeconds(60);
plusMillis(millis)const future = Instant.now().plusMillis(500);
plusNanos(nanos)const future = Instant.now().plusNanos(1_000_000);
minusSeconds(seconds)const past = Instant.now().minusSeconds(60);
minusMillis(millis)const past = Instant.now().minusMillis(500);
minusNanos(nanos)const past = Instant.now().minusNanos(1_000_000);
При арифметике выполняется автоматическая нормализация:
isBefore(other)const a = Instant.now();
const b = a.plusSeconds(10);
a.isBefore(b); // true
isAfter(other)b.isAfter(a); // true
compareTo(other)Возвращает:
-1 если меньше0 если равны1 если большеa.compareTo(b); // -1
equals(other)Проверка полного равенства, включая наносекунды.
a.equals(b); // false
Особенность:
const instant = Instant.now();
const date = new Date(instant.toEpochMilli());
const instant2 = Instant.ofEpochMilli(Date.now());
Ограничение:
Date не поддерживает наносекундыInstant часто используется как граница интервалов.
const start = Instant.parse('2024-01-01T00:00:00Z');
const end = Instant.parse('2024-01-02T00:00:00Z');
const now = Instant.now();
const isInRange = now.isAfter(start) && now.isBefore(end);
Instant не хранит формат отображения, но может быть
преобразован в ISO-строку через внешние классы (например,
DateTimeFormatter и ZonedDateTime в
js-joda).
Типичный путь:
import { ZonedDateTime, ZoneOffset } from 'js-joda';
const instant = Instant.now();
const zdt = instant.atZone(ZoneOffset.UTC);
const text = zdt.toString();
Модель Instant включает:
Следствия:
Поддерживаются экстремальные диапазоны:
Поведение:
Все методы Instant возвращают новый объект.
const t1 = Instant.now();
const t2 = t1.plusSeconds(10);
t1 === t2; // false
Следствия:
const eventTime = Instant.now();
const start = Instant.now();
// операция
const end = Instant.now();
const durationMillis = end.toEpochMilli() - start.toEpochMilli();
if (eventA.isBefore(eventB)) {
// событие A произошло раньше
}
const payload = {
createdAt: Instant.now().toString()
};
Instant опирается на:
Такое представление обеспечивает: