Функция parse из библиотеки date-fns предназначена для
преобразования строкового представления даты в объект Date
на основе заданного шаблона формата.
Сигнатура функции:
parse(dateString, formatString, referenceDate, options)
Пример:
import { parse } from 'date-fns'
const result = parse(
'21.05.2026',
'dd.MM.yyyy',
new Date()
)
console.log(result)
Результат:
2026-05-21T00:00:00.000Z
dateStringСтрока с датой, которую необходимо разобрать.
'25/12/2026'
formatStringШаблон, описывающий структуру строки.
'dd/MM/yyyy'
referenceDateБазовая дата, из которой берутся отсутствующие значения.
new Date()
optionsДополнительные настройки парсинга.
{
locale: ru
}
dateStringПервый аргумент — строка, содержащая дату или время.
parse('10-03-2025', 'dd-MM-yyyy', new Date())
Строка должна строго соответствовать формату.
Если структура строки не совпадает с шаблоном, результатом будет
Invalid Date.
parse('2025/03/10', 'dd-MM-yyyy', new Date())
Результат:
Invalid Date
Можно разбирать только часть даты.
parse('15:30', 'HH:mm', new Date())
В этом случае день, месяц и год будут взяты из
referenceDate.
formatStringШаблон определяет, как интерпретировать строку.
parse('21.05.2026', 'dd.MM.yyyy', new Date())
Каждый токен отвечает за отдельную часть даты.
| Токен | Описание | Пример |
|---|---|---|
d |
День | 5 |
dd |
День с нулём | 05 |
parse('05', 'dd', new Date())
| Токен | Описание | Пример |
|---|---|---|
M |
Месяц | 8 |
MM |
Месяц с нулём | 08 |
MMM |
Краткое название | Aug |
MMMM |
Полное название | August |
parse('12', 'MM', new Date())
| Токен | Описание |
|---|---|
yy |
Двузначный год |
yyyy |
Полный год |
parse('2026', 'yyyy', new Date())
| Токен | Описание |
|---|---|
H |
Часы 0–23 |
HH |
Часы с ведущим нулём |
parse('23', 'HH', new Date())
| Токен | Описание |
|---|---|
m |
Минуты |
mm |
Минуты с нулём |
| Токен | Описание |
|---|---|
s |
Секунды |
ss |
Секунды с нулём |
Разделители должны совпадать со строкой.
parse('2026/05/21', 'yyyy/MM/dd', new Date())
Если указать другой разделитель:
parse('2026-05-21', 'yyyy/MM/dd', new Date())
результат будет некорректным.
Текст в шаблоне можно экранировать одинарными кавычками.
parse(
'Дата: 21-05-2026',
"'Дата:' dd-MM-yyyy",
new Date()
)
Для вывода самой кавычки используется двойное экранирование.
parse(
"2026 o'clock",
"yyyy 'o''clock'",
new Date()
)
referenceDatereferenceDate используется как источник значений,
отсутствующих в строке.
const baseDate = new Date(2026, 4, 20)
parse('15:30', 'HH:mm', baseDate)
Результат:
2026-05-20T15:30:00
parse('21-05', 'dd-MM', new Date(2030, 0, 1))
Год будет взят из referenceDate.
referenceDate обязателенДаже если все данные присутствуют в строке, третий аргумент обязателен.
parse('21.05.2026', 'dd.MM.yyyy', new Date())
Без него функция выбросит ошибку.
optionsДля разбора локализованных названий месяцев используется
locale.
import { ru } from 'date-fns/locale'
parse(
'21 май 2026',
'dd MMM yyyy',
new Date(),
{ locale: ru }
)
Без указания локали библиотека ожидает английские названия.
parse(
'21 May 2026',
'dd MMM yyyy',
new Date()
)
parse(
'18:45',
'HH:mm',
new Date()
)
parse(
'18:45:30',
'HH:mm:ss',
new Date()
)
parse(
'21.05.2026 18:45',
'dd.MM.yyyy HH:mm',
new Date()
)
hh| Токен | Описание |
|---|---|
hh |
Часы 1–12 |
parse(
'11:30 PM',
'hh:mm a',
new Date()
)
aТокен a отвечает за AM/PM.
parse(
'07:15 AM',
'hh:mm a',
new Date()
)
Хотя для ISO существует отдельная функция parseISO,
parse также может использоваться.
parse(
'2026-05-21',
'yyyy-MM-dd',
new Date()
)
parse(
'21 Feb 2026',
'dd MMM yyyy',
new Date()
)
parse(
'21 February 2026',
'dd MMMM yyyy',
new Date()
)
EEEEparse(
'Monday, 21-05-2026',
'EEEE, dd-MM-yyyy',
new Date()
)
Если день недели не совпадает с реальной датой, библиотека ориентируется на числовые значения.
parse(
'Sunday, 21-05-2026',
'EEEE, dd-MM-yyyy',
new Date()
)
Invalid DateДля проверки используется функция isValid.
import { parse, isValid } from 'date-fns'
const result = parse(
'99.99.2026',
'dd.MM.yyyy',
new Date()
)
console.log(isValid(result))
Invalid Dateparse('2026-05', 'dd.MM.yyyy', new Date())
parse('31.02.2026', 'dd.MM.yyyy', new Date())
parse('21-05-2026', 'DD-MM-YYYY', new Date())
yyyy и
YYYYВ date-fns используется:
yyyy
а не:
YYYY
YYYY относится к week-numbering year и может давать
неожиданные результаты около начала года.
Правильно:
parse('2026', 'yyyy', new Date())
dd и DDdd
DD
Использование неправильного токена приводит к ошибкам.
Функция требует точного соответствия.
parse(
'2026-05-21abc',
'yyyy-MM-dd',
new Date()
)
Результат:
Invalid Date
parse(
'Thursday, 21 May 2026 18:45:10',
'EEEE, dd MMMM yyyy HH:mm:ss',
new Date()
)
const userInput = '24.12.2026'
const date = parse(
userInput,
'dd.MM.yyyy',
new Date()
)
const apiDate = '2026-05-21 14:30:00'
const result = parse(
apiDate,
'yyyy-MM-dd HH:mm:ss',
new Date()
)
parse(
'2026/05/21 18:45:30',
'yyyy/MM/dd HH:mm:ss',
new Date()
)
| Формат | Шаблон |
|---|---|
| 21.05.2026 | dd.MM.yyyy |
| 2026-05-21 | yyyy-MM-dd |
| 21/05/2026 | dd/MM/yyyy |
| 18:30 | HH:mm |
| 18:30:15 | HH:mm:ss |
| 21 May 2026 | dd MMM yyyy |
| Thursday, 21 May | EEEE, dd MMMM |
parseISO для ISOДля ISO-дат предпочтительнее:
parseISO('2026-05-21')
После парсинга рекомендуется всегда проверять результат.
if (isValid(date)) {
console.log('Дата корректна')
}
Использование одного стандарта формата снижает количество ошибок:
yyyy-MM-dd
formatimport { parse, format } from 'date-fns'
const date = parse(
'21.05.2026',
'dd.MM.yyyy',
new Date()
)
const result = format(
date,
'yyyy-MM-dd'
)
console.log(result)
parseФункция проходит по шаблону слева направо:
Dateparse создаёт объект Date в локальном
часовом поясе среды выполнения.
parse(
'2026-05-21 10:00',
'yyyy-MM-dd HH:mm',
new Date()
)
Результат может отличаться в разных часовых поясах.
Неправильно:
DD.MM.YYYY
Правильно:
dd.MM.yyyy
parse(
'21 Май 2026',
'dd MMM yyyy',
new Date()
)
Без locale: ru результат будет неверным.
Неправильно:
HH:mm a
Правильно:
hh:mm a
parse и
new Datenew Datenew Date('2026-05-21')
Зависит от реализации движка и формата строки.
parseparse(
'21.05.2026',
'dd.MM.yyyy',
new Date()
)
Даёт предсказуемый результат благодаря явному шаблону.