Работа с текстовым представлением дат и времени в js-joda строится
вокруг строгой модели разбора, где любая строка интерпретируется через
DateTimeFormatter, а результатом становится либо корректный
объект времени, либо исключение DateTimeParseException.
Такой подход делает систему предсказуемой и безопасной, исключая «тихие»
ошибки интерпретации.
В основе парсинга лежат методы каждого временного типа:
LocalDate.parseLocalTime.parseLocalDateTime.parseZonedDateTime.parseInstant.parseКаждый из них использует либо стандартный формат ISO-8601, либо пользовательский форматтер.
import { LocalDate } from '@js-joda/core';
const date = LocalDate.parse('2026-05-25');
Строка должна строго соответствовать ожидаемому формату. Любое отклонение приводит к исключению.
Основной тип ошибки при парсинге —
DateTimeParseException. Он возникает при:
import { LocalDate } from '@js-joda/core';
try {
const date = LocalDate.parse('2026-02-30');
} catch (e) {
console.log(e.name); // DateTimeParseException
}
Ошибка содержит полезные диагностические данные:
Гибкость достигается через DateTimeFormatter,
позволяющий описывать произвольные форматы строк.
import { LocalDate, DateTimeFormatter } from '@js-joda/core';
const formatter = DateTimeFormatter.ofPattern('dd.MM.yyyy');
const date = LocalDate.parse('25.05.2026', formatter);
Любое отклонение от шаблона приводит к исключению, включая:
ResolverStyle определяет, насколько строго
интерпретируется строка:
STRICT — полная проверка корректности датыSMART — допускает некоторые логические исправленияLENIENT — максимально мягкая интерпретацияimport { DateTimeFormatter, ResolverStyle } from '@js-joda/core';
const formatter = DateTimeFormatter
.ofPattern('dd.MM.yyyy')
.withResolverStyle(ResolverStyle.STRICT);
В строгом режиме невозможны несуществующие даты даже при корректном синтаксисе строки.
LocalDateTime требует одновременного присутствия даты и
времени.
import { LocalDateTime } from '@js-joda/core';
const dt = LocalDateTime.parse('2026-05-25T14:30:00');
При использовании кастомного формата важно учитывать разделитель
T или его замену:
import { LocalDateTime, DateTimeFormatter } from '@js-joda/core';
const formatter = DateTimeFormatter.ofPattern('yyyy-MM-dd HH:mm:ss');
const dt = LocalDateTime.parse('2026-05-25 14:30:00', formatter);
Отсутствие компонентов времени или даты приводит к ошибке полного разбора.
Парсинг временных зон требует точного соответствия ISO или наличия зоны в формате.
import { ZonedDateTime } from '@js-joda/core';
const zdt = ZonedDateTime.parse('2026-05-25T14:30:00+05:00[Asia/Almaty]');
Ошибки возникают при:
ZonedDateTimeСтандартная модель обработки ошибок базируется на перехвате исключений:
import { LocalDate } from '@js-joda/core';
function safeParseDate(str) {
try {
return LocalDate.parse(str);
} catch (e) {
if (e.name === 'DateTimeParseException') {
return null;
}
throw e;
}
}
Такой подход позволяет изолировать ошибки парсинга от остальной логики приложения.
Хотя js-joda не предоставляет встроенной функции «валидатора», предварительная проверка может снизить число исключений.
Типовые стратегии:
const isoDateRegex = /^\d{4}-\d{2}-\d{2}$/;
function parseDate(str) {
if (!isoDateRegex.test(str)) return null;
return LocalDate.parse(str);
}
DateTimeFormatter поддерживает необязательные части
через квадратные скобки:
import { DateTimeFormatter, LocalDateTime } from '@js-joda/core';
const formatter = DateTimeFormatter.ofPattern('yyyy-MM-dd['T'HH:mm:ss]');
const a = LocalDateTime.parse('2026-05-25', formatter);
const b = LocalDateTime.parse('2026-05-25T14:30:00', formatter);
Ошибки возникают, если обязательная часть отсутствует или нарушена структура скобок.
На практике большинство сбоев связано с повторяющимися проблемами:
Исключение содержит структурированную информацию:
try {
LocalDate.parse('25-05-2026', DateTimeFormatter.ISO_DATE);
} catch (e) {
console.log(e.getMessage());
}
Эта информация используется для построения диагностических сообщений и логирования.
Некоторые строки могут быть частично валидными, но неоднозначными:
01/02/2026 — зависит от локали2026-05-25 00:00 — может требовать явного
форматтера2026-05-25Z — интерпретация как UTC Instantjs-joda не пытается угадывать смысл строки, что исключает скрытые ошибки интерпретации.
Строка, полученная через форматтер, должна обратно парситься тем же форматтером:
const formatter = DateTimeFormatter.ofPattern('dd.MM.yyyy');
const str = LocalDate.now().format(formatter);
const date = LocalDate.parse(str, formatter);
Несовпадение форматтеров приводит к нестабильному поведению и ошибкам в продакшн-логике.
При обработке массивов строк применяется изоляция ошибок на уровне элемента:
const results = strings.map(s => {
try {
return LocalDate.parse(s);
} catch {
return null;
}
});
Такой подход предотвращает остановку обработки всей коллекции при ошибке одного значения.
Особое внимание требуется при обработке:
js-joda строго применяет календарные правила, исключая невалидные комбинации независимо от контекста строки.