LocalDateTime — один из центральных типов библиотеки
js-joda, предназначенный для хранения даты и времени без привязки к
часовому поясу и смещению UTC. Объект объединяет возможности
LocalDate и LocalTime, формируя полноценную
локальную временную метку.
Тип используется в задачах:
now()const { LocalDateTime } = require('@js-joda/core');
const current = LocalDateTime.now();
console.log(current.toString());
Пример результата:
2026-05-24T14:35:12.345
Метод:
of()const { LocalDateTime } = require('@js-joda/core');
const dateTime = LocalDateTime.of(
2026,
5,
24,
14,
30,
15
);
console.log(dateTime.toString());
Результат:
2026-05-24T14:30:15
Параметры:
| Параметр | Значение |
|---|---|
| year | год |
| month | месяц |
| dayOfMonth | день |
| hour | часы |
| minute | минуты |
| second | секунды |
| nanoOfSecond | наносекунды |
const precise = LocalDateTime.of(
2026,
5,
24,
14,
30,
15,
123456789
);
console.log(precise.toString());
Результат:
2026-05-24T14:30:15.123456789
js-joda поддерживает наносекундную точность, в отличие
от стандартного Date.
const {
LocalDate,
LocalTime,
LocalDateTime
} = require('@js-joda/core');
const date = LocalDate.of(2026, 5, 24);
const time = LocalTime.of(18, 45);
const dateTime = LocalDateTime.of(date, time);
console.log(dateTime.toString());
Результат:
2026-05-24T18:45
Подобный подход особенно полезен при независимом хранении даты и времени.
parse()const { LocalDateTime } = require('@js-joda/core');
const value = LocalDateTime.parse(
'2026-05-24T21:15:30'
);
console.log(value);
Строка должна соответствовать формату ISO-8601.
console.log(dateTime.year());
console.log(dateTime.monthValue());
console.log(dateTime.dayOfMonth());
console.log(dateTime.hour());
console.log(dateTime.minute());
console.log(dateTime.second());
console.log(dateTime.month().toString());
Результат:
MAY
console.log(dateTime.dayOfWeek().toString());
Результат:
SUNDAY
Объекты LocalDateTime неизменяемы. Любая операция
создаёт новый экземпляр.
const updated = dateTime.withYear(2030);
console.log(updated);
const updated = dateTime.withMonth(12);
const updated = dateTime.withDayOfMonth(1);
const updated = dateTime.withHour(9);
const updated = dateTime.withMinute(0);
const future = dateTime.plusDays(10);
const future = dateTime.plusMonths(2);
const future = dateTime.plusYears(1);
const future = dateTime.plusHours(5);
const future = dateTime.plusMinutes(30);
const future = dateTime.plusSeconds(45);
const past = dateTime.minusDays(7);
const past = dateTime.minusMonths(1);
const past = dateTime.minusHours(2);
const result = dateTime
.plusDays(5)
.minusHours(3)
.withMinute(0);
console.log(result);
Иммутабельность позволяет безопасно строить длинные цепочки преобразований.
const a = LocalDateTime.parse('2026-05-24T10:00');
const b = LocalDateTime.parse('2026-05-24T10:00');
console.log(a.equals(b));
isBefore()console.log(a.isBefore(b));
isAfter()console.log(a.isAfter(b));
const list = [
LocalDateTime.parse('2026-05-24T18:00'),
LocalDateTime.parse('2026-05-24T09:00'),
LocalDateTime.parse('2026-05-24T12:00')
];
list.sort((a, b) => a.compareTo(b));
console.log(list);
Duration используется для вычисления времени между двумя
LocalDateTime.
const {
LocalDateTime,
Duration
} = require('@js-joda/core');
const start = LocalDateTime.parse(
'2026-05-24T08:00'
);
const end = LocalDateTime.parse(
'2026-05-24T12:30'
);
const duration = Duration.between(start, end);
console.log(duration.toHours());
Результат:
4
console.log(duration.toMinutes());
Period вычисляет календарную разницу.
const {
LocalDate,
Period
} = require('@js-joda/core');
const start = LocalDate.of(2025, 1, 1);
const end = LocalDate.of(2026, 5, 24);
const period = Period.between(start, end);
console.log(period.years());
console.log(period.months());
console.log(period.days());
Period ориентирован на календарные значения, а не на
абсолютное время.
const date = dateTime.toLocalDate();
console.log(date);
const time = dateTime.toLocalTime();
console.log(time);
Модуль @js-joda/core поддерживает корректировку дат.
const {
LocalDateTime,
TemporalAdjusters,
DayOfWeek
} = require('@js-joda/core');
const value = LocalDateTime.now()
.with(
TemporalAdjusters.next(DayOfWeek.MONDAY)
);
console.log(value);
const startOfDay = dateTime
.withHour(0)
.withMinute(0)
.withSecond(0)
.withNano(0);
const endOfDay = dateTime
.withHour(23)
.withMinute(59)
.withSecond(59)
.withNano(999999999);
const {
LocalDateTime,
DateTimeFormatter
} = require('@js-joda/core');
const formatter = DateTimeFormatter.ofPattern(
'dd.MM.yyyy HH:mm:ss'
);
const value = LocalDateTime.now();
console.log(value.format(formatter));
Результат:
24.05.2026 18:45:10
| Шаблон | Описание |
|---|---|
| yyyy | год |
| MM | месяц |
| dd | день |
| HH | часы |
| mm | минуты |
| ss | секунды |
console.log(
dateTime.format(
DateTimeFormatter.ISO_LOCAL_DATE_TIME
)
);
const formatter = DateTimeFormatter.ofPattern(
'dd.MM.yyyy HH:mm'
);
const parsed = LocalDateTime.parse(
'24.05.2026 14:30',
formatter
);
console.log(parsed);
ChronoUnit позволяет измерять разницу между временными
точками.
const {
ChronoUnit
} = require('@js-joda/core');
const days = ChronoUnit.DAYS.between(
start,
end
);
console.log(days);
const hours = ChronoUnit.HOURS.between(
start,
end
);
console.log(hours);
function isWorkingHours(dateTime) {
const hour = dateTime.hour();
return hour >= 9 && hour < 18;
}
function isExpired(expirationDate) {
return expirationDate.isBefore(
LocalDateTime.now()
);
}
const meeting = LocalDateTime.now()
.plusDays(3)
.withHour(11)
.withMinute(30)
.withSecond(0);
console.log(meeting);
const start = LocalDateTime.parse(
'2026-05-24T09:00'
);
const end = LocalDateTime.parse(
'2026-05-24T12:00'
);
let current = start;
while (current.isBefore(end)) {
console.log(current);
current = current.plusMinutes(30);
}
LocalDateTime часто используется для хранения:
Пример структуры:
const post = {
title: 'Новая статья',
createdAt: LocalDateTime.now(),
updatedAt: LocalDateTime.now()
};
| LocalDateTime | Date |
|---|---|
| Не зависит от таймзоны | Использует UTC |
| Иммутабелен | Изменяем |
| Наносекунды | Миллисекунды |
| Предсказуемая арифметика | Возможны побочные эффекты |
| ISO API | Устаревший API |
Тип не содержит:
Для работы с часовыми поясами используются:
ZonedDateTime;OffsetDateTime;ZoneId.LocalDateTime не предназначен для хранения глобального
времени.
Неправильно:
const utcTime = LocalDateTime.now();
Правильно использовать ZonedDateTime или
Instant, если требуется абсолютное время.
Неправильно:
dateTime.plusDays(1);
console.log(dateTime);
Объект останется неизменным.
Правильно:
dateTime = dateTime.plusDays(1);
LocalDateTime.of(
2026,
15,
50,
99,
99
);
Будет выброшено исключение.
Иммутабельность обеспечивает:
Каждая операция создаёт новый объект:
const original = LocalDateTime.now();
const modified = original.plusDays(1);
console.log(original);
console.log(modified);
const {
LocalDateTime,
Duration
} = require('@js-joda/core');
const bookingStart = LocalDateTime.parse(
'2026-05-24T14:00'
);
const bookingEnd = bookingStart.plusHours(2);
const duration = Duration.between(
bookingStart,
bookingEnd
);
console.log(bookingStart);
console.log(bookingEnd);
console.log(duration.toMinutes());
const createdAt = LocalDateTime.now();
const deadline = createdAt
.plusDays(7)
.withHour(23)
.withMinute(59);
console.log(deadline);
const now = LocalDateTime.now();
const events = [
LocalDateTime.parse('2026-05-24T10:00'),
LocalDateTime.parse('2026-05-25T12:00'),
LocalDateTime.parse('2026-05-20T09:00')
];
const futureEvents = events.filter(
event => event.isAfter(now)
);
console.log(futureEvents);