Парсинг строк в js-joda опирается на строго определённые форматы и
использование объектов DateTimeFormatter. Библиотека
следует модели Java Time API, поэтому большинство правил разбора строк
совпадает с ISO-8601 и механизмами java.time.
Основная идея заключается в том, что строковое представление времени
преобразуется в объект даты/времени через статические методы
parse. Почти каждый класс даты во js-joda поддерживает свой
вариант парсинга:
LocalDate.parseLocalTime.parseLocalDateTime.parseInstant.parseZonedDateTime.parseOffsetDateTime.parseКаждый из методов использует ISO-формат по умолчанию, если не указан иной форматтер.
Наиболее частый сценарий — работа с ISO-8601 строками, которые распознаются без дополнительных настроек.
import { LocalDate } from 'js-joda';
const date = LocalDate.parse('2026-05-24');
Поддерживаемый формат:
YYYY-MM-DDimport { LocalTime } from 'js-joda';
const time = LocalTime.parse('14:30:15');
Формат:
HH:mm:ssHH:mm:ss.SSSimport { LocalDateTime } from 'js-joda';
const dateTime = LocalDateTime.parse('2026-05-24T14:30:15');
Разделитель T является обязательным для ISO-формата.
Instant предназначен для работы с абсолютным временем в
UTC.
import { Instant } from 'js-joda';
const instant = Instant.parse('2026-05-24T10:30:00Z');
Особенности:
Z или смещениеimport { OffsetDateTime } from 'js-joda';
const odt = OffsetDateTime.parse('2026-05-24T14:30:15+03:00');
Содержит:
import { ZonedDateTime } from 'js-joda';
const zdt = ZonedDateTime.parse('2026-05-24T14:30:15+03:00[Europe/Moscow]');
Дополнительно включает:
Когда строка не соответствует ISO-формату, применяется
DateTimeFormatter.
import { LocalDate, DateTimeFormatter } from 'js-joda';
const formatter = DateTimeFormatter.ofPattern('dd.MM.yyyy');
const date = LocalDate.parse('24.05.2026', formatter);
y — годM — месяцd — деньH — часы (24h)m — минутыs — секундыjs-joda поддерживает локализацию через Locale.
import { LocalDate, DateTimeFormatter, Locale } from 'js-joda';
const formatter = DateTimeFormatter
.ofPattern('d MMMM yyyy')
.withLocale(Locale.US);
const date = LocalDate.parse('24 May 2026', formatter);
Особенности:
Locale для неоднозначных
форматовПарсинг может выполняться в разных режимах строгости:
STRICT — строгая проверка корректности датыSMART — допускает некоторые логические исправленияLENIENT — максимально гибкий разборimport { DateTimeFormatter, ResolverStyle } from 'js-joda';
const formatter = DateTimeFormatter
.ofPattern('dd-MM-yyyy')
.withResolverStyle(ResolverStyle.STRICT);
STRICT: 31.02.2026 → ошибкаSMART: может интерпретировать как 28.02 или 01.03 в
зависимости от правилLENIENT: переносит лишние дни на следующий месяцОшибки возникают при несоответствии формата или некорректных данных:
import { LocalDate } from 'js-joda';
try {
LocalDate.parse('2026-02-31');
} catch (e) {
// DateTimeParseException
}
Типичные причины ошибок:
При работе с ZonedDateTime важно учитывать корректность
идентификаторов зон:
import { ZonedDateTime } from 'js-joda';
const zdt = ZonedDateTime.parse('2026-05-24T12:00:00+03:00[Asia/Almaty]');
Особенности:
Сложные форматы требуют составного
DateTimeFormatter:
import { LocalDateTime, DateTimeFormatter } from 'js-joda';
const formatter = DateTimeFormatter.ofPattern('yyyy/MM/dd HH-mm-ss');
const dt = LocalDateTime.parse('2026/05/24 14-30-15', formatter);
Перед парсингом часто выполняется предварительная обработка строк:
Пример:
const normalized = input.replace(',', '.').trim();
В js-joda парсинг оптимизирован под повторное использование
DateTimeFormatter.
Ключевые особенности:
ISO (parse без formatter):
кастомный formatter: