Класс LocalDate представляет дату без времени и часового
пояса. Используется для хранения календарной даты: года, месяца и
дня.
const { LocalDate } = require('@js-joda/core');
const date = LocalDate.now();
console.log(date.toString()); // 2026-05-25
const date1 = LocalDate.of(2025, 3, 15);
const date2 = LocalDate.parse('2025-03-15');
console.log(date1.year()); // 2025
console.log(date1.monthValue()); // 3
console.log(date1.dayOfMonth()); // 15
Объекты Js-joda неизменяемы. Любая операция возвращает новый экземпляр.
const nextWeek = date1.plusWeeks(1);
const previousMonth = date1.minusMonths(1);
const a = LocalDate.parse('2025-01-01');
const b = LocalDate.parse('2025-12-31');
console.log(a.isBefore(b)); // true
console.log(a.isAfter(b)); // false
console.log(a.equals(b)); // false
const end = LocalDate
.of(2025, 2, 1)
.withDayOfMonth(28);
LocalTime хранит время без даты и без часового
пояса.
const { LocalTime } = require('@js-joda/core');
const time = LocalTime.now();
console.log(time.toString());
const time1 = LocalTime.of(14, 30);
const time2 = LocalTime.parse('18:45:10');
console.log(time2.hour());
console.log(time2.minute());
console.log(time2.second());
const result = time1
.plusHours(2)
.minusMinutes(15);
console.log(result.toString());
Js-joda поддерживает точность до наносекунд.
const nano = LocalTime.of(10, 15, 30, 500000000);
console.log(nano.nano());
LocalDateTime объединяет дату и время без информации о
часовом поясе.
const { LocalDateTime } = require('@js-joda/core');
const dt = LocalDateTime.now();
const dt1 = LocalDateTime.of(
2025,
6,
10,
12,
45,
30
);
const dt2 = LocalDateTime.parse(
'2025-06-10T12:45:30'
);
const changed = dt2
.plusDays(5)
.minusHours(3);
const date = dt2.toLocalDate();
const time = dt2.toLocalTime();
ZonedDateTime хранит дату, время и часовой пояс.
const {
ZonedDateTime,
ZoneId
} = require('@js-joda/core');
const zoned = ZonedDateTime.now(
ZoneId.of('Europe/Moscow')
);
const tokyo = ZonedDateTime.now(
ZoneId.of('Asia/Tokyo')
);
console.log(tokyo.zone().id());
const london = tokyo.withZoneSameInstant(
ZoneId.of('Europe/London')
);
Класс особенно важен для:
OffsetDateTime содержит дату, время и смещение UTC.
const {
OffsetDateTime,
ZoneOffset
} = require('@js-joda/core');
const offset = OffsetDateTime.now(
ZoneOffset.UTC
);
| Класс | Содержит |
|---|---|
| ZonedDateTime | полноценный часовой пояс |
| OffsetDateTime | только UTC-смещение |
Пример смещения:
const date = OffsetDateTime.of(
2025,
1,
10,
15,
0,
0,
0,
ZoneOffset.ofHours(3)
);
OffsetTime представляет время со смещением UTC, но без
даты.
const {
OffsetTime,
ZoneOffset
} = require('@js-joda/core');
const time = OffsetTime.of(
12,
30,
0,
0,
ZoneOffset.UTC
);
Instant хранит момент времени в UTC.
const { Instant } = require('@js-joda/core');
const instant = Instant.now();
const i1 = Instant.parse(
'2025-01-01T00:00:00Z'
);
const epoch = instant.toEpochMilli();
Duration хранит временной интервал в секундах и
наносекундах.
const {
Duration,
LocalTime
} = require('@js-joda/core');
const start = LocalTime.of(10, 0);
const end = LocalTime.of(12, 30);
const duration = Duration.between(start, end);
console.log(duration.toHours()); // 2
const d1 = Duration.ofHours(5);
const d2 = Duration.ofMinutes(90);
const total = d1.plusMinutes(30);
Period хранит период в годах, месяцах и днях.
const { Period } = require('@js-joda/core');
const period = Period.of(1, 2, 15);
console.log(period.years());
console.log(period.months());
console.log(period.days());
| Класс | Используется для |
|---|---|
| Duration | часы, минуты, секунды |
| Period | годы, месяцы, дни |
Year представляет отдельный год.
const { Year } = require('@js-joda/core');
const year = Year.of(2025);
console.log(year.isLeap());
YearMonth хранит комбинацию года и месяца.
const { YearMonth } = require('@js-joda/core');
const ym = YearMonth.of(2025, 7);
console.log(ym.lengthOfMonth());
MonthDay хранит месяц и день без года.
const { MonthDay } = require('@js-joda/core');
const birthday = MonthDay.of(5, 20);
Подходит для:
ZoneId представляет идентификатор часового пояса.
const { ZoneId } = require('@js-joda/core');
const zone = ZoneId.of('Europe/Berlin');
ZoneId.of('UTC');
ZoneId.of('Asia/Tokyo');
ZoneId.of('America/New_York');
ZoneOffset хранит фиксированное смещение UTC.
const { ZoneOffset } = require('@js-joda/core');
const offset = ZoneOffset.ofHours(3);
ZoneOffset.of('+05:30');
Month — перечисление месяцев.
const { Month } = require('@js-joda/core');
console.log(Month.JANUARY);
console.log(
Month.AUGUST.value()
);
const next = Month.MARCH.plus(2);
DayOfWeek представляет дни недели.
const { DayOfWeek } = require('@js-joda/core');
console.log(DayOfWeek.MONDAY);
| День | Значение |
|---|---|
| MONDAY | 1 |
| TUESDAY | 2 |
| WEDNESDAY | 3 |
| THURSDAY | 4 |
| FRIDAY | 5 |
| SATURDAY | 6 |
| SUNDAY | 7 |
DateTimeFormatter используется для форматирования и
парсинга.
const {
DateTimeFormatter,
LocalDate
} = require('@js-joda/core');
const formatter = DateTimeFormatter.ofPattern(
'dd.MM.yyyy'
);
const date = LocalDate.now();
console.log(
date.format(formatter)
);
const parsed = LocalDate.parse(
'25.12.2025',
formatter
);
| Шаблон | Значение |
|---|---|
| yyyy | год |
| MM | месяц |
| dd | день |
| HH | часы |
| mm | минуты |
| ss | секунды |
ChronoUnit содержит единицы времени.
const {
ChronoUnit,
LocalDate
} = require('@js-joda/core');
const start = LocalDate.of(2025, 1, 1);
const end = LocalDate.of(2025, 12, 31);
const days = ChronoUnit.DAYS.between(
start,
end
);
TemporalAdjusters содержит готовые корректировки
дат.
const {
TemporalAdjusters,
LocalDate,
DayOfWeek
} = require('@js-joda/core');
const result = LocalDate.now()
.with(
TemporalAdjusters.lastDayOfMonth()
);
const nextMonday = LocalDate.now()
.with(
TemporalAdjusters.next(
DayOfWeek.MONDAY
)
);
Clock используется как источник текущего времени.
const { Clock } = require('@js-joda/core');
const clock = Clock.systemUTC();
Clock.systemDefaultZone();
Clock.systemUTC();
Clock.fixed(
Instant.now(),
ZoneOffset.UTC
);
Clock.fixed() позволяет создавать предсказуемые
тесты.
const fixedClock = Clock.fixed(
Instant.parse('2025-01-01T00:00:00Z'),
ZoneOffset.UTC
);
DecimalStyle управляет локализованными символами
форматирования.
const { DecimalStyle } = require('@js-joda/core');
Используется редко, в основном при сложной локализации.
ResolverStyle определяет строгость парсинга.
const {
ResolverStyle,
DateTimeFormatter
} = require('@js-joda/core');
| Режим | Описание |
|---|---|
| STRICT | строгая проверка |
| SMART | интеллектуальный режим |
| LENIENT | мягкий режим |
SignStyle управляет отображением знаков числа.
const { SignStyle } = require('@js-joda/core');
Используется внутри форматтеров даты и времени.
ValueRange описывает допустимый диапазон значений.
const { ValueRange } = require('@js-joda/core');
const range = ValueRange.of(1, 12);
console.log(
range.isValidValue(5)
);
Исключение, возникающее при неподдерживаемой временной операции.
try {
LocalDate.now().hour();
} catch (e) {
console.log(e);
}
Базовое исключение библиотеки.
try {
LocalDate.of(2025, 15, 1);
} catch (e) {
console.log(e);
}
Выбрасывается при передаче null там, где это
запрещено.
try {
LocalDate.parse(null);
} catch (e) {
console.log(e);
}
Возникает при арифметическом переполнении.
try {
LocalDate.now().plusYears(999999999);
} catch (e) {
console.log(e);
}
Базовый интерфейс временных объектов.
Интерфейс для чтения временных данных.
Интерфейс корректировки даты и времени.
Интерфейс для периодов и длительностей.
Интерфейс единиц времени.
Интерфейс полей даты и времени.
Библиотека построена вокруг нескольких принципов:
Все объекты immutable.
const a = LocalDate.now();
const b = a.plusDays(1);
console.log(a !== b);
Объекты безопасны для многопоточного использования.
По умолчанию библиотека работает по ISO-8601.
Js-joda не использует внутреннюю модель Date, что
устраняет множество проблем Jav * aScript:
Добавляет поддержку IANA timezone database.
require('@js-joda/timezone');
Добавляет локализацию форматирования.
Содержит дополнительные классы и расширения.
LocalDate
Instant
ZonedDateTime
Duration
Period
LocalTime
YearMonth
MonthDay