Получение текущего времени

Библиотека Js-joda предоставляет современную модель работы с датой и временем, основанную на API java.time из Java. В отличие от стандартного объекта Date, библиотека разделяет понятия локального времени, даты, временной зоны и момента времени. Это позволяет получать текущее время предсказуемо и без скрытых преобразований.

Текущее локальное время

Для получения текущего локального времени используется класс LocalTime.

const { LocalTime } = require('@js-joda/core');

const time = LocalTime.now();

console.log(time.toString());

Пример результата:

14:35:12.847

Особенности LocalTime

Класс хранит только время суток:

  • часы;
  • минуты;
  • секунды;
  • наносекунды.

Дата и часовой пояс отсутствуют.

Получение отдельных компонентов

const { LocalTime } = require('@js-joda/core');

const now = LocalTime.now();

console.log(now.hour());
console.log(now.minute());
console.log(now.second());
console.log(now.nano());

Результат:

14
35
12
847000000

Текущая дата

Для получения текущей даты используется LocalDate.

const { LocalDate } = require('@js-joda/core');

const today = LocalDate.now();

console.log(today.toString());

Пример:

2026-05-24

Получение частей даты

console.log(today.year());
console.log(today.monthValue());
console.log(today.dayOfMonth());

Текущая дата и время

Наиболее часто используется класс LocalDateTime.

const { LocalDateTime } = require('@js-joda/core');

const now = LocalDateTime.now();

console.log(now.toString());

Пример результата:

2026-05-24T14:42:10.215

Что содержит LocalDateTime

Объект включает:

  • дату;
  • часы;
  • минуты;
  • секунды;
  • наносекунды.

При этом информация о часовом поясе отсутствует.

Работа с часовыми поясами

Получение времени с учётом зоны

Для работы с временными зонами применяется ZonedDateTime.

const { ZonedDateTime } = require('@js-joda/core');

const zoned = ZonedDateTime.now();

console.log(zoned.toString());

Пример:

2026-05-24T14:45:33.112+05:00[Asia/Qyzylorda]

Такой объект содержит:

  • дату;
  • время;
  • смещение UTC;
  • идентификатор временной зоны.

Использование конкретной временной зоны

Подключение поддержки timezone

Для полноценной работы с часовыми поясами требуется пакет:

npm install @js-joda/timezone

Получение времени в определённой зоне

require('@js-joda/timezone');

const {
    ZonedDateTime,
    ZoneId
} = require('@js-joda/core');

const tokyo = ZonedDateTime.now(
    ZoneId.of('Asia/Tokyo')
);

console.log(tokyo.toString());

Пример:

2026-05-24T18:52:11.551+09:00[Asia/Tokyo]

Получение текущего UTC-времени

UTC используется для хранения времени в базах данных, API и распределённых системах.

require('@js-joda/timezone');

const {
    ZonedDateTime,
    ZoneOffset
} = require('@js-joda/core');

const utcNow = ZonedDateTime.now(
    ZoneOffset.UTC
);

console.log(utcNow.toString());

Результат:

2026-05-24T09:55:20.331Z

Использование Instant

Абсолютный момент времени

Instant представляет точку на временной шкале UTC.

const { Instant } = require('@js-joda/core');

const now = Instant.now();

console.log(now.toString());

Пример:

2026-05-24T09:57:44.281Z

Когда использовать Instant

Instant подходит для:

  • логирования;
  • хранения временных меток;
  • работы с серверами;
  • синхронизации времени;
  • API;
  • распределённых систем.

Сравнение основных классов

Класс Содержит дату Содержит время Содержит timezone
LocalDate Да Нет Нет
LocalTime Нет Да Нет
LocalDateTime Да Да Нет
ZonedDateTime Да Да Да
Instant Да Да UTC

Получение времени в миллисекундах

Через Instant

const { Instant } = require('@js-joda/core');

const millis = Instant.now().toEpochMilli();

console.log(millis);

Пример:

1779617000000

Unix timestamp в секундах

const { Instant } = require('@js-joda/core');

const timestamp = Instant.now().epochSecond();

console.log(timestamp);

Получение текущего времени несколько раз

Каждый вызов now() создаёт новый объект.

const { LocalTime } = require('@js-joda/core');

console.log(LocalTime.now().toString());

setTimeout(() => {
    console.log(LocalTime.now().toString());
}, 2000);

Пример:

14:10:01.331
14:10:03.334

Использование Clock

Контролируемый источник времени

Класс Clock позволяет управлять временем приложения.

const {
    Clock,
    LocalDateTime,
    ZoneId
} = require('@js-joda/core');

const clock = Clock.system(
    ZoneId.of('Europe/Berlin')
);

const now = LocalDateTime.now(clock);

console.log(now.toString());

Преимущества Clock

Использование Clock полезно для:

  • тестирования;
  • воспроизводимости;
  • мокирования времени;
  • серверных приложений;
  • управления timezone.

Фиксированное время

Создание неизменяемого времени

const {
    Clock,
    Instant,
    ZoneOffset,
    LocalDateTime
} = require('@js-joda/core');

const fixedClock = Clock.fixed(
    Instant.parse('2026-01-01T00:00:00Z'),
    ZoneOffset.UTC
);

const now = LocalDateTime.now(fixedClock);

console.log(now.toString());

Результат всегда будет одинаковым:

2026-01-01T00:00

Получение времени с системной зоны

const {
    ZoneId,
    ZonedDateTime
} = require('@js-joda/core');

const systemZone = ZoneId.systemDefault();

const now = ZonedDateTime.now(systemZone);

console.log(systemZone.toString());
console.log(now.toString());

Проверка временной зоны

const { ZoneId } = require('@js-joda/core');

const zone = ZoneId.systemDefault();

console.log(zone.id());

Пример:

Asia/Almaty

Форматирование текущего времени

Использование DateTimeFormatter

const {
    LocalDateTime,
    DateTimeFormatter
} = require('@js-joda/core');

const now = LocalDateTime.now();

const formatter = DateTimeFormatter.ofPattern(
    'dd.MM.yyyy HH:mm:ss'
);

console.log(now.format(formatter));

Результат:

24.05.2026 14:22:18

Получение только часов и минут

const {
    LocalTime,
    DateTimeFormatter
} = require('@js-joda/core');

const time = LocalTime.now();

const formatter = DateTimeFormatter.ofPattern(
    'HH:mm'
);

console.log(time.format(formatter));

Пример:

14:27

Работа с наносекундами

Js-joda поддерживает наносекундную точность.

const { LocalTime } = require('@js-joda/core');

const now = LocalTime.now();

console.log(now.nano());

Усечение времени

const {
    LocalDateTime,
    ChronoUnit
} = require('@js-joda/core');

const now = LocalDateTime.now();

const truncated = now.truncatedTo(
    ChronoUnit.SECONDS
);

console.log(truncated.toString());

Результат:

2026-05-24T14:33:50

Разница между Date и Js-joda

Стандартный Date

const now = new Date();

console.log(now);

Объект Date одновременно хранит:

  • дату;
  • время;
  • timezone;
  • timestamp.

Это приводит к неоднозначному поведению при преобразованиях.

Подход Js-joda

Библиотека разделяет разные типы времени:

  • локальная дата;
  • локальное время;
  • дата-время;
  • абсолютный момент;
  • дата-время с timezone.

Такой подход делает код:

  • более читаемым;
  • безопасным;
  • предсказуемым;
  • удобным для тестирования.

Практический пример

Логирование времени запуска

const {
    ZonedDateTime,
    DateTimeFormatter
} = require('@js-joda/core');

require('@js-joda/timezone');

const formatter = DateTimeFormatter.ofPattern(
    'yyyy-MM-dd HH:mm:ss'
);

const startedAt = ZonedDateTime.now();

console.log(
    `Application started at ${
        startedAt.format(formatter)
    }`
);

Типичные ошибки

Использование LocalDateTime вместо Instant

Неверно:

const createdAt = LocalDateTime.now();

Для хранения времени в БД лучше использовать:

const createdAt = Instant.now();

Игнорирование timezone

Неверно:

LocalDateTime.now();

Для международных приложений предпочтительнее:

ZonedDateTime.now();

или:

Instant.now();

Рекомендации по выбору класса

Сценарий Рекомендуемый класс
Только дата LocalDate
Только время LocalTime
Локальная дата и время LocalDateTime
Время с timezone ZonedDateTime
Timestamp и серверное время Instant
Тестируемое время Clock