Библиотека js-joda опирается на строгую модель работы с датами и временем, где основной формат обмена — ISO-8601. Именно поэтому базовый разбор строк в даты чаще всего выполняется без дополнительных настроек.
import { LocalDate, LocalDateTime, ZonedDateTime } from '@js-joda/core';
Для большинства типов данных используется метод parse,
который ожидает строку в стандартном формате.
const date = LocalDate.parse('2026-05-24');
const dateTime = LocalDateTime.parse('2026-05-24T14:30:00');
const zoned = ZonedDateTime.parse('2026-05-24T14:30:00+06:00[Asia/Almaty]');
При корректном ISO-формате библиотека самостоятельно определяет структуру строки и преобразует её в соответствующий объект. Это поведение делает парсинг предсказуемым и исключает неоднозначность.
LocalDate работает только с календарной датой без
времени и зоны. Формат строки должен строго соответствовать
YYYY-MM-DD.
const d1 = LocalDate.parse('2026-01-15');
const d2 = LocalDate.parse('1999-12-31');
Любое отклонение от формата приводит к исключению:
LocalDate.parse('15-01-2026'); // ошибка
В js-joda нет неявных преобразований, поэтому даже частично корректные строки не интерпретируются.
LocalDateTime расширяет модель даты, добавляя время, но
без часового пояса. Поддерживается стандартный ISO-формат с разделителем
T.
const dt = LocalDateTime.parse('2026-05-24T10:15:30');
Поддерживаются также доли секунды:
const dt = LocalDateTime.parse('2026-05-24T10:15:30.123');
Строка должна включать дату и время одновременно. Отсутствие одной из частей делает строку невалидной:
LocalDateTime.parse('2026-05-24'); // ошибка
ZonedDateTime требует максимально полной информации:
дата, время, смещение и идентификатор зоны.
const zdt = ZonedDateTime.parse('2026-05-24T10:15:30+06:00[Asia/Almaty]');
Структура строки включает три компонента:
Эта модель позволяет точно восстановить момент времени без двусмысленности.
Неполные строки не разбираются:
ZonedDateTime.parse('2026-05-24T10:15:30'); // ошибка
Когда входные строки не соответствуют ISO-8601, применяется
DateTimeFormatter. Он позволяет описывать произвольные
шаблоны.
import { DateTimeFormatter } from '@js-joda/core';
Пример форматтера для даты в формате dd.MM.yyyy:
const formatter = DateTimeFormatter.ofPattern('dd.MM.yyyy');
const date = LocalDate.parse('24.05.2026', formatter);
Форматтер становится обязательным аргументом, если строка отклоняется от ISO-стандарта.
const formatter = DateTimeFormatter.ofPattern('dd.MM.yyyy HH:mm');
const dt = LocalDateTime.parse('24.05.2026 18:45', formatter);
Шаблон строго соответствует входной строке. Любое расхождение в порядке или символах приводит к ошибке парсинга.
Наиболее часто используемые элементы:
yyyy — годMM — месяцdd — деньHH — часы (24-часовой формат)mm — минутыss — секундыПример комбинированного шаблона:
const formatter = DateTimeFormatter.ofPattern('yyyy/MM/dd HH:mm:ss');
const dt = LocalDateTime.parse('2026/05/24 14:30:00', formatter);
js-joda поддерживает настройку стратегии разбора через
ResolverStyle. Это влияет на поведение при неоднозначных
или частично некорректных данных.
import { ResolverStyle } from '@js-joda/core';
Три режима:
STRICT — строгая проверка всех значенийSMART — допускает логические корректировкиLENIENT — максимально гибкий режимПример строгого форматтера:
const formatter = DateTimeFormatter
.ofPattern('dd.MM.yyyy')
.withResolverStyle(ResolverStyle.STRICT);
В строгом режиме дата 31.02.2026 будет отклонена, даже
если логика допускает «перенос» на март.
Строки с UTC-смещением обрабатываются через
OffsetDateTime или ZonedDateTime.
import { OffsetDateTime } from '@js-joda/core';
const odt = OffsetDateTime.parse('2026-05-24T10:15:30+06:00');
Здесь не требуется идентификатор зоны, достаточно смещения. Однако такая модель не хранит информацию о регионе.
При некорректной строке js-joda выбрасывает исключение
DateTimeParseException.
try {
const date = LocalDate.parse('2026/05/24');
} catch (e) {
// обработка ошибки
}
Ошибка содержит позицию, на которой произошёл сбой, что помогает диагностировать проблему в формате входных данных.
ISO-парсинг поддерживает разные уровни детализации:
LocalDate.parse('2026-05-24');
LocalDateTime.parse('2026-05-24T14:30');
ZonedDateTime.parse('2026-05-24T14:30+06:00[Asia/Almaty]');
Чем больше информации содержится в строке, тем более специализированный тип выбирается для результата.
Результат парсинга часто становится входом для дальнейших операций:
const date = LocalDate.parse('2026-05-24');
const nextWeek = date.plusWeeks(1);
При этом сам процесс парсинга остаётся неизменным — строка всегда интерпретируется в неизменяемый объект даты.
js-joda не использует локаль браузера для автоматического разбора
строк. Любой нестандартный формат требует явного описания через
DateTimeFormatter.
const formatter = DateTimeFormatter.ofPattern('dd-MM-yyyy');
const date = LocalDate.parse('24-05-2026', formatter);
Такой подход исключает неоднозначность, характерную для
локализованных форматов вроде 05/06/2026, где невозможно
однозначно определить порядок месяца и дня без контекста.
Некоторые строки содержат только часть информации. js-joda не заполняет пропущенные значения автоматически:
LocalDate.parse('2026-05'); // ошибка
Для подобных случаев требуется либо полный формат, либо собственная логика предобработки строки перед парсингом.
При наличии долей секунды точность сохраняется в объекте времени:
const dt = LocalDateTime.parse('2026-05-24T10:15:30.456789');
js-joda поддерживает высокую точность, не округляя значение автоматически.
Один и тот же DateTimeFormatter используется как для
разбора строк, так и для их формирования.
const formatter = DateTimeFormatter.ofPattern('dd.MM.yyyy HH:mm');
const dt = LocalDateTime.parse('24.05.2026 18:45', formatter);
const str = dt.format(formatter);
Такая симметрия обеспечивает консистентность представления данных при сериализации и десериализации.