接收一个字符串并使用date-fns验证它是否是一个有效的日期



我只是想验证我收到的字符串是否是使用date-fns的有效日期。我将收到一个像这样的日期'29/10/1989' BR日期。我想把它转换成29-10-1989来检验它是否有效。有人能帮我吗?

const parsedDate = parseISO('29/10/1989')

上面的代码不工作,我得到'Invalid Date'

尝试parselocale选项如下:

import { parse, isValid, format } from 'date-fns';
import { enGB } from 'date-fns/locale';
const parsedDate = parse('29/10/1989', 'P', new Date(), { locale: enGB });
const isValidDate = isValid(parsedDate);
const formattedDate = format(parsedDate, 'dd-MM-yyyy');

我想到了这个(基于Anatoly的回答):

import { parse, isValid, format } from 'date-fns';
import { enGB } from 'date-fns/locale';
function isValidDate(day, month, year) {
const parsed = parse(`${day}/${month}/${year}`, 'P', new Date(), { locale: enGB })
return isValid(parsed)
}
console.log(isValidDate('31', '04', '2021')); // invalid: april has only 30 days
console.log(isValidDate('30', '04', '2021')); // valid

我正在处理一个类似的问题,我认为这也解决了它。我更喜欢这个解决方案,因为解析比locale对象更显式。

import { parse, isValid, format } from "date-fns";
const getFormmatedDate = (date) => {
const parsed = parse(date, "dd/MM/yyyy", new Date());
if (isValid(parsed)) {
return format(parsed, "dd-MM-yyyy");
}
return null;
};
console.log(getFormmatedDate("31/04/1989")); // invalid: april has only 30 days
console.log(getFormmatedDate("30/04/1989"));

最新更新