Проверка немецкой даты с помощью date-fns

У меня есть строка с немецкой датой (31.01.2019, ДД.ММ.ГГГГ). Теперь мне нужно проверить, действительна ли дата с помощью date-fns.

dateFns.isValid(new Date('19.11.2019'), 'DD.MM.YYYY');

Это не работает. Я всегда получаю ложный отзыв от date-fns. Я думаю, что date-fns ожидает другой формат даты.

Как я могу проверить строку с немецким форматом даты?


person HansPeter    schedule 02.02.2019    source источник
comment
Если вы передаете строку new Date, то она должна быть в формате ISO, любой другой формат приведет либо к неверной дате, либо к непредсказуемому результату. И 19.11.2019 не является допустимой строкой для создания даты.   -  person t.niese    schedule 02.02.2019
comment
Вы можете разделить его на каждую точку ., а затем использовать конструктор Date следующим образом: stackoverflow.com/a/33299764   -  person adiga    schedule 02.02.2019


Ответы (2)


Вы можете использовать функцииisValid и parse библиотеки date-fns:

import { isValid, parse } from 'date-fns';

// parse the string to a Date
const date = parse('31.08.2012', 'dd.MM.yyyy', new Date());

// then check the validity of that date
isValid(date)

Дополнительные сведения об этих функциях см. в документации: https://date-fns.org/docs/Getting-Started

person Tkim    schedule 09.06.2020
comment
не могли бы вы помочь stackoverflow .com/questions/67760399/ - person Asking; 30.05.2021

Из date-fns документация:

Возвращает false, если аргумент имеет значение Invalid Date, и true в противном случае. Недопустимая дата — это дата, значение времени которой равно NaN.

Поскольку new Date('19.11.2019') уже дает Invalid Date (поскольку он не отформатирован в ISO), вы получаете false.

Если вы хотите использовать немецкий формат, вам следует преобразование вашего формата даты в формат ISO.

person Myerffoeg    schedule 02.02.2019
comment
Спасибо. date-fns поддерживает только формат гггг-мм-дд для проверки? это правильно? - person HansPeter; 03.02.2019
comment
@HansPeter до версии 2.x (которая все еще является альфа-версией) функция isValid принимает в качестве входных данных только объект Date и проверяет, содержит ли этот объект Date действительную информацию о дате. Он не выполняет никакой проверки формата, только если он содержит действительную дату. И объект Date javascript не содержит никакого формата, он просто содержит представление даты. А new Date принимает даты только в формате ISO. - person t.niese; 03.02.2019