Библиотека js-joda предоставляет строгую модель работы с датой и временем, основанную на API Java Time. Три ключевых типа, используемых для представления календарных данных:
LocalDate — только дата;LocalTime — только время;LocalDateTime — дата и время без часового пояса.Преобразование между этими типами является одной из наиболее распространённых задач при работе с расписаниями, событиями, журналами логирования, системами бронирования и бизнес-логикой.
const { LocalDate } = require('@js-joda/core');
const date = LocalDate.of(2025, 3, 15);
console.log(date.toString());
Результат:
2025-03-15
const { LocalTime } = require('@js-joda/core');
const time = LocalTime.of(14, 30, 45);
console.log(time.toString());
Результат:
14:30:45
const { LocalDateTime } = require('@js-joda/core');
const dateTime = LocalDateTime.of(2025, 3, 15, 14, 30);
console.log(dateTime.toString());
Результат:
2025-03-15T14:30
Наиболее распространённый способ объединения даты и времени —
использование метода atTime().
const {
LocalDate,
LocalTime
} = require('@js-joda/core');
const date = LocalDate.of(2025, 5, 10);
const time = LocalTime.of(16, 45);
const result = date.atTime(time);
console.log(result.toString());
Результат:
2025-05-10T16:45
Метод atTime() позволяет передавать часы, минуты и
дополнительные компоненты напрямую.
const date = LocalDate.of(2025, 5, 10);
const result = date.atTime(9, 30);
console.log(result.toString());
Результат:
2025-05-10T09:30
const result = date.atTime(9, 30, 15);
console.log(result.toString());
Результат:
2025-05-10T09:30:15
const result = date.atTime(9, 30, 15, 500000000);
console.log(result.toString());
Результат:
2025-05-10T09:30:15.500
Объект LocalDateTime можно разделить на отдельные
компоненты.
const { LocalDateTime } = require('@js-joda/core');
const dateTime = LocalDateTime.of(
2025,
8,
20,
18,
10
);
const date = dateTime.toLocalDate();
console.log(date.toString());
Результат:
2025-08-20
Извлечение даты используется:
const logs = [
LocalDateTime.parse('2025-05-01T10:15'),
LocalDateTime.parse('2025-05-01T12:30'),
LocalDateTime.parse('2025-05-02T09:00')
];
const grouped = {};
for (const log of logs) {
const date = log.toLocalDate().toString();
if (!grouped[date]) {
grouped[date] = [];
}
grouped[date].push(log.toString());
}
console.log(grouped);
Для извлечения времени используется метод
toLocalTime().
const { LocalDateTime } = require('@js-joda/core');
const dateTime = LocalDateTime.of(
2025,
11,
3,
21,
45,
10
);
const time = dateTime.toLocalTime();
console.log(time.toString());
Результат:
21:45:10
Часто дата не имеет значения, а требуется только время события.
const meeting = LocalDateTime.parse(
'2025-11-03T21:45:10'
);
const meetingTime = meeting.toLocalTime();
console.log(`Время встречи: ${meetingTime}`);
Тип LocalDateTime является immutable-объектом. Любое
изменение создаёт новый экземпляр.
const {
LocalDate,
LocalDateTime
} = require('@js-joda/core');
const original = LocalDateTime.parse(
'2025-01-10T14:20'
);
const newDate = LocalDate.of(2025, 2, 1);
const updated = original.with(newDate);
console.log(updated.toString());
Результат:
2025-02-01T14:20
const {
LocalDateTime,
LocalTime
} = require('@js-joda/core');
const original = LocalDateTime.parse(
'2025-01-10T14:20'
);
const newTime = LocalTime.of(9, 0);
const updated = original.with(newTime);
console.log(updated.toString());
Результат:
2025-01-10T09:00
Строка может содержать одновременно дату и время.
const { LocalDateTime } = require('@js-joda/core');
const value = LocalDateTime.parse(
'2025-06-15T12:45:30'
);
console.log(value.toString());
const date = value.toLocalDate();
const time = value.toLocalTime();
console.log(date.toString());
console.log(time.toString());
Во многих базах данных дата и время могут храниться в разных полях.
const {
LocalDate,
LocalTime
} = require('@js-joda/core');
const dateFromDb = '2025-12-01';
const timeFromDb = '08:15:00';
const date = LocalDate.parse(dateFromDb);
const time = LocalTime.parse(timeFromDb);
const appointment = date.atTime(time);
console.log(appointment.toString());
Для создания LocalDateTime с временем 00:00
используется atStartOfDay().
const { LocalDate } = require('@js-joda/core');
const date = LocalDate.of(2025, 7, 1);
const start = date.atStartOfDay();
console.log(start.toString());
Результат:
2025-07-01T00:00
const startOfDay = date.atStartOfDay();
const nextDay = date.plusDays(1).atStartOfDay();
Такой подход особенно полезен при:
const first = LocalDate.parse('2025-01-10');
const second = LocalDate.parse('2025-01-15');
console.log(first.isBefore(second));
const morning = LocalTime.parse('09:00');
const evening = LocalTime.parse('18:00');
console.log(morning.isBefore(evening));
const a = LocalDateTime.parse(
'2025-01-10T09:00'
);
const b = LocalDateTime.parse(
'2025-01-10T18:00'
);
console.log(a.isBefore(b));
const date = dateTime.toLocalDate();
После такого преобразования информация о времени полностью исчезает.
const time = dateTime.toLocalTime();
После преобразования невозможно восстановить исходную дату без дополнительной информации.
LocalDate.parse('15-01-2025');
Такой код вызовет ошибку, поскольку стандартный формат:
YYYY-MM-DD
Корректный вариант:
LocalDate.parse('2025-01-15');
Все типы в js-joda неизменяемы.
const date = LocalDate.of(2025, 1, 1);
const changed = date.plusDays(10);
console.log(date.toString());
console.log(changed.toString());
Результат:
2025-01-01
2025-01-11
Исходный объект не изменяется.
const {
LocalDate,
LocalTime
} = require('@js-joda/core');
const date = LocalDate.now();
const result = date
.plusDays(5)
.atTime(
LocalTime.of(10, 30)
)
.plusHours(2);
console.log(result.toString());
const {
LocalDate,
LocalTime
} = require('@js-joda/core');
const bookingDate = LocalDate.parse(
'2025-09-10'
);
const bookingTime = LocalTime.parse(
'19:30'
);
const reservation = bookingDate.atTime(
bookingTime
);
console.log(reservation.toString());
const openingTime = LocalTime.of(10, 0);
if (
reservation.toLocalTime()
.isBefore(openingTime)
) {
console.log('Ресторан ещё закрыт');
}
const eventTime = LocalDateTime.now();
console.log(eventTime.toString());
const reportDate = eventTime.toLocalDate();
console.log(reportDate.toString());
const displayTime = eventTime.toLocalTime();
console.log(displayTime.toString());
LocalDate.of(2025, 4, 20);
LocalTime.of(13, 45, 10);
LocalDateTime.of(
2025,
4,
20,
13,
45,
10
);
LocalDate + LocalTime
↓
LocalDateTime
LocalDateTime
↓ ↓
LocalDate LocalTime
Подходит для:
Используется для:
Применяется для: