LocalDate — один из центральных типов библиотеки
js-joda, предназначенный для работы с календарной датой без времени и
часового пояса. Объект хранит только:
Тип используется для:
const { LocalDate } = require('@js-joda/core');
const date = LocalDate.of(2025, 3, 15);
console.log(date.toString());
// 2025-03-15
LocalDateof()Основной способ создания даты.
LocalDate.of(year, month, day)
Пример:
const date = LocalDate.of(2025, 12, 31);
console.log(date.toString());
// 2025-12-31
Monthconst { LocalDate, Month } = require('@js-joda/core');
const date = LocalDate.of(2025, Month.APRIL, 10);
console.log(date.toString());
// 2025-04-10
now()Возвращает текущую дату.
const today = LocalDate.now();
console.log(today.toString());
parse()Создание даты из строки.
const date = LocalDate.parse('2025-08-21');
console.log(date.toString());
// 2025-08-21
Строка должна соответствовать формату ISO-8601.
year()Возвращает год.
const date = LocalDate.parse('2025-06-18');
console.log(date.year());
// 2025
monthValue()Возвращает номер месяца.
console.log(date.monthValue());
// 6
month()Возвращает объект месяца.
console.log(date.month().toString());
// JUNE
dayOfMonth()Получение дня месяца.
console.log(date.dayOfMonth());
// 18
dayOfYear()Номер дня в году.
console.log(date.dayOfYear());
// 169
dayOfWeek()Получение дня недели.
console.log(date.dayOfWeek().toString());
// WEDNESDAY
Объекты LocalDate неизменяемы (immutable). Любое
изменение создаёт новый объект.
plusDays()Добавление дней.
const date = LocalDate.of(2025, 1, 10);
const newDate = date.plusDays(5);
console.log(newDate.toString());
// 2025-01-15
Исходный объект не меняется:
console.log(date.toString());
// 2025-01-10
minusDays()Вычитание дней.
const result = LocalDate.of(2025, 5, 20)
.minusDays(7);
console.log(result.toString());
// 2025-05-13
plusWeeks()Добавление недель.
const result = LocalDate.of(2025, 2, 1)
.plusWeeks(3);
console.log(result.toString());
// 2025-02-22
minusWeeks()const result = LocalDate.of(2025, 2, 1)
.minusWeeks(2);
console.log(result.toString());
// 2025-01-18
plusMonths()Добавление месяцев.
const result = LocalDate.of(2025, 1, 15)
.plusMonths(2);
console.log(result.toString());
// 2025-03-15
const result = LocalDate.of(2025, 1, 31)
.plusMonths(1);
console.log(result.toString());
// 2025-02-28
Библиотека автоматически корректирует невозможные даты.
minusMonths()const result = LocalDate.of(2025, 8, 31)
.minusMonths(6);
console.log(result.toString());
// 2025-02-28
plusYears()const result = LocalDate.of(2020, 2, 29)
.plusYears(1);
console.log(result.toString());
// 2021-02-28
minusYears()const result = LocalDate.of(2025, 9, 15)
.minusYears(10);
console.log(result.toString());
// 2015-09-15
withYear()const result = LocalDate.of(2025, 4, 12)
.withYear(2030);
console.log(result.toString());
// 2030-04-12
withMonth()const result = LocalDate.of(2025, 7, 10)
.withMonth(12);
console.log(result.toString());
// 2025-12-10
withDayOfMonth()const result = LocalDate.of(2025, 7, 10)
.withDayOfMonth(1);
console.log(result.toString());
// 2025-07-01
withDayOfYear()const result = LocalDate.of(2025, 1, 1)
.withDayOfYear(100);
console.log(result.toString());
// 2025-04-10
isBefore()Проверка, находится ли дата раньше другой.
const a = LocalDate.parse('2025-01-01');
const b = LocalDate.parse('2025-06-01');
console.log(a.isBefore(b));
// true
isAfter()console.log(b.isAfter(a));
// true
isEqual()const x = LocalDate.parse('2025-03-15');
const y = LocalDate.parse('2025-03-15');
console.log(x.isEqual(y));
// true
equals()Строгое сравнение объектов.
console.log(x.equals(y));
// true
isLeapYear()console.log(LocalDate.of(2024, 1, 1).isLeapYear());
// true
console.log(LocalDate.of(2025, 1, 1).isLeapYear());
// false
lengthOfMonth()Количество дней в месяце.
const date = LocalDate.of(2025, 2, 1);
console.log(date.lengthOfMonth());
// 28
lengthOfYear()console.log(date.lengthOfYear());
// 365
const date = LocalDate.of(2025, 8, 18);
const firstDay = date.withDayOfMonth(1);
console.log(firstDay.toString());
// 2025-08-01
const date = LocalDate.of(2025, 2, 10);
const lastDay = date.withDayOfMonth(
date.lengthOfMonth()
);
console.log(lastDay.toString());
// 2025-02-28
const current = LocalDate.parse('2025-06-15');
const start = LocalDate.parse('2025-06-01');
const end = LocalDate.parse('2025-06-30');
const isInRange =
!current.isBefore(start) &&
!current.isAfter(end);
console.log(isInRange);
// true
const { LocalDate, Period } = require('@js-joda/core');
const birthday = LocalDate.parse('1995-04-10');
const today = LocalDate.now();
const age = Period.between(birthday, today);
console.log(age.years());
PeriodPeriod хранит разницу между датами в годах, месяцах и
днях.
between()const start = LocalDate.parse('2025-01-01');
const end = LocalDate.parse('2025-03-15');
const period = Period.between(start, end);
console.log(period.months()); // 2
console.log(period.days()); // 14
toString()const date = LocalDate.of(2025, 11, 5);
console.log(date.toString());
// 2025-11-05
Для расширенного форматирования используется пакет:
npm install @js-joda/locale
npm install @js-joda/timezone
npm install @js-joda/locale_ru
DateTimeFormatterconst {
LocalDate,
DateTimeFormatter
} = require('@js-joda/core');
const date = LocalDate.parse('2025-12-31');
const formatter =
DateTimeFormatter.ofPattern('dd.MM.yyyy');
console.log(date.format(formatter));
// 31.12.2025
const formatter =
DateTimeFormatter.ofPattern('dd/MM/yyyy');
const date = LocalDate.parse(
'25/08/2025',
formatter
);
console.log(date.toString());
// 2025-08-25
DayOfWeekconst {
LocalDate,
DayOfWeek
} = require('@js-joda/core');
const date = LocalDate.parse('2025-05-26');
console.log(date.dayOfWeek() === DayOfWeek.MONDAY);
// true
const day = date.dayOfWeek();
const isWeekend =
day === DayOfWeek.SATURDAY ||
day === DayOfWeek.SUNDAY;
console.log(isWeekend);
let current = LocalDate.parse('2025-01-01');
const end = LocalDate.parse('2025-01-05');
while (!current.isAfter(end)) {
console.log(current.toString());
current = current.plusDays(1);
}
Результат:
2025-01-01
2025-01-02
2025-01-03
2025-01-04
2025-01-05
Неверно:
let date = LocalDate.now();
date.plusDays(1);
console.log(date);
Метод не изменяет объект.
Правильно:
date = date.plusDays(1);
В стандартном Date месяцы начинаются с нуля.
В LocalDate месяцы начинаются с единицы.
LocalDate.of(2025, 1, 1);
Январь — это 1, а не 0.
const deadline =
LocalDate.now().plusDays(30);
console.log(deadline.toString());
const today = LocalDate.now();
const lastDay = today.withDayOfMonth(
today.lengthOfMonth()
);
console.log(lastDay.toString());
const expireDate =
LocalDate.parse('2025-06-01');
const expired =
LocalDate.now().isAfter(expireDate);
console.log(expired);
const nextQuarter =
LocalDate.now().plusMonths(3);
console.log(nextQuarter.toString());
LocalDateTimeconst {
LocalDate,
LocalTime,
LocalDateTime
} = require('@js-joda/core');
const date = LocalDate.now();
const time = LocalTime.of(14, 30);
const dateTime =
LocalDateTime.of(date, time);
console.log(dateTime.toString());
ZonedDateTimeconst {
LocalDate,
LocalTime,
ZoneId,
ZonedDateTime
} = require('@js-joda/core');
const zoned = ZonedDateTime.of(
LocalDate.now(),
LocalTime.NOON,
ZoneId.of('Europe/Moscow')
);
console.log(zoned.toString());
LocalDateDate;java.time.