LocalDateTime — один из центральных классов библиотеки
js-joda,
предназначенный для хранения даты и времени без часового пояса. Объект
объединяет:
Экземпляр LocalDateTime не содержит информации о
временной зоне или смещении UTC. Это делает его удобным для:
Пример создания:
const { LocalDateTime } = require('@js-joda/core')
const dateTime = LocalDateTime.of(2025, 3, 15, 14, 30)
console.log(dateTime.toString())
// 2025-03-15T14:30
now()Возвращает текущие локальные дату и время.
const now = LocalDateTime.now()
console.log(now.toString())
of()Основной способ создания объекта.
LocalDateTime.of(year, month, day, hour, minute)
LocalDateTime.of(year, month, day, hour, minute, second)
LocalDateTime.of(year, month, day, hour, minute, second, nano)
const dateTime = LocalDateTime.of(
2025,
12,
31,
23,
59,
45,
500000000
)
console.log(dateTime.toString())
// 2025-12-31T23:59:45.500
parse()Создаёт объект из строки.
const dt = LocalDateTime.parse('2025-06-10T08:15:30')
console.log(dt.hour())
// 8
Используется ISO-8601:
YYYY-MM-DDTHH:mm:ss
Допускаются:
year()Возвращает год.
const dt = LocalDateTime.parse('2025-08-14T12:00')
console.log(dt.year())
// 2025
monthValue()Возвращает номер месяца.
console.log(dt.monthValue())
// 8
month()Возвращает объект месяца.
console.log(dt.month().toString())
// AUGUST
dayOfMonth()Получение дня месяца.
console.log(dt.dayOfMonth())
// 14
dayOfWeek()Возвращает день недели.
console.log(dt.dayOfWeek().toString())
// THURSDAY
dayOfYear()Номер дня в году.
console.log(dt.dayOfYear())
hour()console.log(dt.hour())
minute()console.log(dt.minute())
second()console.log(dt.second())
nano()console.log(dt.nano())
LocalDateTime является immutable-типом.
Это означает:
with...Позволяют заменить отдельную часть даты или времени.
withYear()const updated = dt.withYear(2030)
console.log(updated.toString())
withMonth()const updated = dt.withMonth(1)
withDayOfMonth()const updated = dt.withDayOfMonth(1)
withHour()const updated = dt.withHour(9)
withMinute()const updated = dt.withMinute(45)
withSecond()const updated = dt.withSecond(0)
withNano()const updated = dt.withNano(0)
plus...Позволяют добавлять временные значения.
plusYears()const next = dt.plusYears(2)
plusMonths()const next = dt.plusMonths(3)
plusWeeks()const next = dt.plusWeeks(2)
plusDays()const next = dt.plusDays(10)
plusHours()const next = dt.plusHours(5)
plusMinutes()const next = dt.plusMinutes(30)
plusSeconds()const next = dt.plusSeconds(15)
plusNanos()const next = dt.plusNanos(1000)
minus...Работают аналогично plus....
minusYears()const old = dt.minusYears(1)
minusMonths()const old = dt.minusMonths(6)
minusDays()const old = dt.minusDays(20)
minusHours()const old = dt.minusHours(12)
minusMinutes()const old = dt.minusMinutes(45)
isBefore()const a = LocalDateTime.parse('2025-01-01T10:00')
const b = LocalDateTime.parse('2025-01-01T12:00')
console.log(a.isBefore(b))
// true
isAfter()console.log(b.isAfter(a))
// true
isEqual()console.log(a.isEqual(b))
// false
compareTo()Возвращает:
console.log(a.compareTo(b))
toString()const dt = LocalDateTime.of(2025, 7, 20, 16, 40)
console.log(dt.toString())
// 2025-07-20T16:40
LocalDatetoLocalDate()Извлекает только дату.
const date = dt.toLocalDate()
console.log(date.toString())
LocalTimetoLocalTime()Извлекает только время.
const time = dt.toLocalTime()
console.log(time.toString())
atDate()Добавляет дату к объекту времени.
const { LocalDate, LocalTime } = require('@js-joda/core')
const date = LocalDate.of(2025, 5, 1)
const time = LocalTime.of(14, 30)
const result = time.atDate(date)
console.log(result.toString())
atTime()Добавляет время к объекту даты.
const result = date.atTime(time)
plus(amount, unit)Позволяет использовать универсальные единицы времени.
const { ChronoUnit } = require('@js-joda/core')
const result = dt.plus(5, ChronoUnit.DAYS)
minus(amount, unit)const result = dt.minus(2, ChronoUnit.HOURS)
until()Вычисляет разницу между датами.
const start = LocalDateTime.parse('2025-01-01T00:00')
const end = LocalDateTime.parse('2025-01-10T00:00')
const days = start.until(end, ChronoUnit.DAYS)
console.log(days)
// 9
Durationconst { Duration } = require('@js-joda/core')
const duration = Duration.ofHours(5)
const result = dt.plus(duration)
PeriodPeriod работает только с датой.
const { Period } = require('@js-joda/core')
const period = Period.ofDays(10)
const result = dt.plus(period)
truncatedTo()Обрезает дату и время до указанной точности.
const result = dt.truncatedTo(ChronoUnit.HOURS)
console.log(result.toString())
const result = dt.truncatedTo(ChronoUnit.MINUTES)
format()Используется вместе с DateTimeFormatter.
const {
LocalDateTime,
DateTimeFormatter
} = require('@js-joda/core')
const dt = LocalDateTime.now()
const formatter = DateTimeFormatter.ofPattern(
'dd.MM.yyyy HH:mm:ss'
)
console.log(dt.format(formatter))
| Токен | Значение |
|---|---|
| yyyy | год |
| MM | месяц |
| dd | день |
| HH | часы |
| mm | минуты |
| ss | секунды |
| SSS | миллисекунды |
const formatter = DateTimeFormatter.ofPattern(
'EEEE, dd MMMM yyyy HH:mm:ss'
)
console.log(dt.format(formatter))
const formatter = DateTimeFormatter.ofPattern(
'dd/MM/yyyy HH:mm'
)
const dt = LocalDateTime.parse(
'25/12/2025 18:30',
formatter
)
console.log(dt.toString())
with()Позволяет изменять поле через TemporalField.
const { ChronoField } = require('@js-joda/core')
const result = dt.with(
ChronoField.HOUR_OF_DAY,
8
)
get()Получение значения поля.
const hour = dt.get(ChronoField.HOUR_OF_DAY)
console.log(hour)
range()Возвращает диапазон допустимых значений.
const range = dt.range(
ChronoField.DAY_OF_MONTH
)
console.log(range.toString())
query()Позволяет выполнять пользовательские запросы.
const query = temporal => temporal.dayOfWeek()
const result = dt.query(query)
console.log(result.toString())
adjustInto()Копирует значения даты и времени в другой temporal-объект.
const adjusted = dt.adjustInto(
LocalDateTime.now()
)
toLocalDate().isLeapYear()const leap = dt.toLocalDate().isLeapYear()
console.log(leap)
lengthOfMonth()const days = dt.toLocalDate().lengthOfMonth()
console.log(days)
lengthOfYear()const days = dt.toLocalDate().lengthOfYear()
js-joda поддерживает наносекундную точность.
const dt = LocalDateTime.of(
2025,
1,
1,
12,
0,
0,
999999999
)
console.log(dt.nano())
Благодаря immutable-подходу методы удобно комбинировать.
const result = LocalDateTime.now()
.plusDays(5)
.withHour(9)
.withMinute(0)
.withSecond(0)
.truncatedTo(ChronoUnit.MINUTES)
console.log(result.toString())
const meeting = LocalDateTime.now()
.plusWeeks(1)
.withHour(10)
.withMinute(30)
const expired = deadline.isBefore(
LocalDateTime.now()
)
console.log(expired)
const timestamp = LocalDateTime.now()
.format(
DateTimeFormatter.ofPattern(
'yyyyMMdd_HHmmss'
)
)
console.log(timestamp)
Неверно:
dt.plusDays(1)
console.log(dt)
Правильно:
dt = dt.plusDays(1)
LocalDateTime для UTCLocalDateTime не хранит:
Для UTC используются:
ZonedDateTime;OffsetDateTime;Instant.Неверно:
LocalDateTime.parse('01-12-2025')
Правильно:
LocalDateTime.parse('2025-12-01T00:00')
js-joda основана на принципах Java Time API:
Преимущества подхода:
ZonedDateTimeconst {
LocalDateTime,
ZoneId
} = require('@js-joda/core')
require('@js-joda/timezone')
const dt = LocalDateTime.now()
const zoned = dt.atZone(
ZoneId.of('Europe/Moscow')
)
console.log(zoned.toString())
Instantconst instant = zoned.toInstant()
console.log(instant.toString())
equals()const a = LocalDateTime.parse('2025-01-01T10:00')
const b = LocalDateTime.parse('2025-01-01T10:00')
console.log(a.equals(b))
// true
hashCode()Возвращает числовой хэш объекта.
console.log(dt.hashCode())
toJSON()Удобен при сериализации.
const json = JSON.stringify({
createdAt: dt
})
console.log(json)
const formatter =
DateTimeFormatter.ISO_LOCAL_DATE_TIME
console.log(dt.format(formatter))
const result = LocalDateTime
.parse('2025-05-10T12:00')
.plusMonths(1)
.minusDays(3)
.withHour(8)
.withMinute(15)
.withSecond(0)
console.log(result.toString())