Работа с текущей датой и временем в JavaScript в контексте библиотеки
js-joda строится вокруг неизменяемых типов данных и явного управления
часовыми поясами. В отличие от стандартного объекта Date,
который сочетает в себе дату, время и системные особенности платформы,
js-joda разделяет эти сущности на логически независимые компоненты и
требует явного указания контекста времени.
Основным источником текущего времени в js-joda является системные
часы, инкапсулированные в объекте Clock. Через него
библиотека получает «момент сейчас», который затем преобразуется в
конкретные временные типы: локальную дату, дату-время или момент времени
в UTC.
Наиболее часто используемый тип — LocalDate,
представляющий календарную дату без времени и часового пояса.
import { LocalDate } from '@js-joda/core';
const today = LocalDate.now();
Метод now() возвращает дату в соответствии с системным
часовым поясом среды выполнения. Результат содержит только год, месяц и
день, без информации о времени суток.
Ключевая особенность:
Для сценариев, где требуется объединение даты и времени без привязки
к часовому поясу, используется LocalDateTime.
import { LocalDateTime } from '@js-joda/core';
const now = LocalDateTime.now();
Структура включает:
Особенность модели:
Для работы с абсолютным временем используется Instant,
который представляет собой точку на временной шкале в формате UTC.
import { Instant } from '@js-joda/core';
const now = Instant.now();
Instant полезен для:
Особенности:
Для получения текущей даты и времени с учетом конкретного часового
пояса используется ZonedDateTime.
import { ZonedDateTime, ZoneId } from '@js-joda/core';
const now = ZonedDateTime.now(ZoneId.of('Europe/Moscow'));
Структура включает:
Основные сценарии:
Для контроля над источником времени используется Clock.
Это важный инструмент при тестировании и моделировании временных
сценариев.
import { Clock, Instant, ZoneId } from '@js-joda/core';
const clock = Clock.system(ZoneId.of('UTC'));
const now = Instant.now(clock);
Clock позволяет:
Пример фиксированного времени:
import { Clock, Instant, ZoneId } from '@js-joda/core';
const fixedInstant = Instant.parse('2025-01-01T00:00:00Z');
const clock = Clock.fixed(fixedInstant, ZoneId.of('UTC'));
const now = Instant.now(clock);
В этом случае now всегда возвращает одно и то же
значение.
Разделение типов является ключевым принципом js-joda.
Пример различий:
LocalDate.now();
LocalDateTime.now();
ZonedDateTime.now();
Каждый вызов использует один и тот же системный момент, но интерпретирует его по-разному.
При получении текущего времени часто требуется указать зону явно.
import { ZonedDateTime, ZoneId } from '@js-joda/core';
const tokyoTime = ZonedDateTime.now(ZoneId.of('Asia/Tokyo'));
const londonTime = ZonedDateTime.now(ZoneId.of('Europe/London'));
Особенность:
Если зона не указана, используется системная временная зона среды выполнения:
import { ZoneId, ZonedDateTime } from '@js-joda/core';
const systemZone = ZoneId.systemDefault();
const now = ZonedDateTime.now(systemZone);
Системная зона зависит от:
Instant представляет момент времени, а
ZonedDateTime интерпретирует его в контексте зоны.
Преобразование:
import { Instant, ZoneId, ZonedDateTime } from '@js-joda/core';
const instant = Instant.now();
const zoned = instant.atZone(ZoneId.of('Europe/Moscow'));
Обратное преобразование:
const backToInstant = zoned.toInstant();
Таким образом:
Instant — абсолютное времяZonedDateTime — локализованное представлениеТекущая дата часто используется как отправная точка для арифметики дат.
import { LocalDate } from '@js-joda/core';
const today = LocalDate.now();
const nextWeek = today.plusDays(7);
const previousMonth = today.minusMonths(1);
Особенность:
js-joda использует системное время среды:
Это делает получение текущей даты детерминированным относительно окружения, но независимым от глобальных изменяемых объектов.
Точность now() зависит от платформы:
В большинстве случаев:
const reportDate = LocalDate.now();
const timestamp = Instant.now();
const eventTime = ZonedDateTime.now(ZoneId.of('Europe/Moscow'));
const displayTime = LocalDateTime.now();
Подход библиотеки основан на нескольких принципах:
Получение текущей даты является частным случаем общего механизма
работы с Clock, что позволяет контролировать и
переопределять источник времени без изменения бизнес-логики.