Библиотека Js-joda предоставляет API для работы с датой и временем,
вдохновлённый пакетом java.time из Java. Форматирование
времени строится вокруг класса DateTimeFormatter, который
отвечает за преобразование объектов даты и времени в строку и
обратно.
Для работы с форматированием используются пакеты:
const {
LocalDate,
LocalTime,
LocalDateTime,
ZonedDateTime,
OffsetDateTime,
DateTimeFormatter
} = require('@js-joda/core');
Базовое форматирование выполняется методом format():
const date = LocalDate.of(2025, 5, 18);
const result = date.format(DateTimeFormatter.ISO_LOCAL_DATE);
console.log(result);
Результат:
2025-05-18
В библиотеке присутствует набор встроенных форматтеров стандарта ISO.
Форматирует только дату:
const date = LocalDate.of(2025, 12, 31);
console.log(
date.format(DateTimeFormatter.ISO_LOCAL_DATE)
);
Результат:
2025-12-31
Форматирует только время:
const time = LocalTime.of(14, 45, 12);
console.log(
time.format(DateTimeFormatter.ISO_LOCAL_TIME)
);
Результат:
14:45:12
Используется для локальной даты и времени без часового пояса:
const dateTime = LocalDateTime.of(2025, 5, 18, 14, 30);
console.log(
dateTime.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME)
);
Результат:
2025-05-18T14:30:00
Форматирование даты со смещением UTC:
const {
ZoneOffset,
OffsetDateTime
} = require('@js-joda/core');
const dateTime = OffsetDateTime.of(
2025,
5,
18,
14,
30,
0,
0,
ZoneOffset.ofHours(3)
);
console.log(
dateTime.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME)
);
Результат:
2025-05-18T14:30:00+03:00
Для задания пользовательского формата применяется метод
DateTimeFormatter.ofPattern().
const formatter = DateTimeFormatter.ofPattern(
'dd.MM.yyyy HH:mm:ss'
);
const dateTime = LocalDateTime.of(
2025,
5,
18,
9,
15,
40
);
console.log(dateTime.format(formatter));
Результат:
18.05.2025 09:15:40
| Шаблон | Описание | Пример |
|---|---|---|
y |
год | 2025 |
yy |
две цифры года | 25 |
yyyy |
полный год | 2025 |
Пример:
const formatter = DateTimeFormatter.ofPattern('dd.MM.yy');
| Шаблон | Описание | Пример |
|---|---|---|
M |
номер месяца | 5 |
MM |
месяц с нулём | 05 |
MMM |
краткое название | May |
MMMM |
полное название | May |
Пример:
const formatter = DateTimeFormatter.ofPattern('dd MMMM yyyy');
| Шаблон | Описание | Пример |
|---|---|---|
d |
день месяца | 3 |
dd |
день с нулём | 03 |
| Шаблон | Описание | Пример |
|---|---|---|
H |
часы 0–23 | 7 |
HH |
часы с нулём | 07 |
| Шаблон | Описание |
|---|---|
m |
минуты |
mm |
минуты с нулём |
s |
секунды |
ss |
секунды с нулём |
const time = LocalTime.of(8, 5);
const formatter = DateTimeFormatter.ofPattern('HH:mm');
console.log(time.format(formatter));
Результат:
08:05
const time = LocalTime.of(21, 17, 9);
const formatter = DateTimeFormatter.ofPattern(
'HH:mm:ss'
);
console.log(time.format(formatter));
Результат:
21:17:09
Для отображения времени в 12-часовом формате используются символы
hh и a.
const formatter = DateTimeFormatter.ofPattern(
'hh:mm a'
);
const time = LocalTime.of(18, 45);
console.log(time.format(formatter));
Результат:
06:45 PM
const dateTime = LocalDateTime.of(
2025,
11,
3,
16,
20,
10
);
const formatter = DateTimeFormatter.ofPattern(
'dd.MM.yyyy HH:mm:ss'
);
console.log(dateTime.format(formatter));
Результат:
03.11.2025 16:20:10
const formatter = DateTimeFormatter.ofPattern(
'EEEE'
);
const date = LocalDate.of(2025, 5, 18);
console.log(date.format(formatter));
Результат:
Sunday
const formatter = DateTimeFormatter.ofPattern(
'EEE'
);
Пример результата:
Sun
const formatter = DateTimeFormatter.ofPattern(
'MMMM'
);
Результат:
May
Любой текст можно встроить в формат при помощи одинарных кавычек.
const formatter = DateTimeFormatter.ofPattern(
"dd.MM.yyyy 'время:' HH:mm"
);
const dateTime = LocalDateTime.of(
2025,
5,
18,
10,
30
);
console.log(dateTime.format(formatter));
Результат:
18.05.2025 время: 10:30
Символ S используется для дробной части секунды.
const dateTime = LocalDateTime.of(
2025,
5,
18,
10,
30,
15,
123000000
);
const formatter = DateTimeFormatter.ofPattern(
'HH:mm:ss.SSS'
);
console.log(dateTime.format(formatter));
Результат:
10:30:15.123
const formatter = DateTimeFormatter.ofPattern(
'yyyy-MM-dd HH:mm XXX'
);
Пример результата:
2025-05-18 14:30 +03:00
const formatter = DateTimeFormatter.ofPattern(
'yyyy-MM-dd HH:mm z'
);
Для поддержки локалей требуется пакет:
npm install @js-joda/locale
Подключение локали:
require('@js-joda/locale_ru');
Использование:
const formatter = DateTimeFormatter
.ofPattern('d MMMM yyyy');
const date = LocalDate.of(2025, 5, 18);
console.log(date.format(formatter));
После подключения русской локали:
18 мая 2025
Форматтеры используются не только для вывода, но и для разбора строк.
const formatter = DateTimeFormatter.ofPattern(
'dd.MM.yyyy'
);
const date = LocalDate.parse(
'18.05.2025',
formatter
);
console.log(date);
Если строка не соответствует шаблону, возникает исключение.
const formatter = DateTimeFormatter.ofPattern(
'dd.MM.yyyy'
);
LocalDate.parse(
'2025-05-18',
formatter
);
Ошибка:
DateTimeParseException
const formatter = DateTimeFormatter.ofPattern(
'yyyy-MM-dd HH:mm:ss.SSS'
);
Пример:
2025-05-18 14:33:22.381
const formatter = DateTimeFormatter.ofPattern(
'dd MMM yyyy'
);
Пример:
18 May 2025
const formatter = DateTimeFormatter.ofPattern(
'yyyyMMdd_HHmmss'
);
Пример:
20250518_143322
Объекты DateTimeFormatter являются
immutable-структурами. После создания форматтер нельзя изменить.
const formatter = DateTimeFormatter.ofPattern(
'dd.MM.yyyy'
);
Это позволяет:
Создание форматтера — относительно дорогая операция. Часто используемые экземпляры рекомендуется выносить в константы.
const DATE_FORMATTER =
DateTimeFormatter.ofPattern(
'dd.MM.yyyy'
);
function formatDate(date) {
return date.format(DATE_FORMATTER);
}
Символы шаблона интерпретируются как управляющие. Для вывода специальных символов применяется экранирование.
const formatter = DateTimeFormatter.ofPattern(
"yyyy-MM-dd'T'HH:mm:ss"
);
Результат:
2025-05-18T10:30:00
mm вместо
MMMM — месяц, mm — минуты.
Ошибка:
DateTimeFormatter.ofPattern(
'dd.mm.yyyy'
);
Правильно:
DateTimeFormatter.ofPattern(
'dd.MM.yyyy'
);
hh вместо
HH| Шаблон | Формат |
|---|---|
HH |
24 часа |
hh |
12 часов |
const formatter = DateTimeFormatter.ofPattern(
'yyyy-MM-dd'
);
LocalDate.parse(
'18.05.2025',
formatter
);
Такой код завершится ошибкой разбора.
const {
LocalDateTime,
DateTimeFormatter
} = require('@js-joda/core');
const formatter = DateTimeFormatter.ofPattern(
'dd.MM.yyyy HH:mm:ss'
);
const now = LocalDateTime.now();
const result = now.format(formatter);
console.log(result);
Возможный результат:
18.05.2025 21:44:11