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

30

我想验证我收到的字符串是否是一个有效的日期,使用date-fns库。 我将会收到一个巴西日期格式如'29/10/1989'的日期。 我希望将它转换为29-10-1989并检查它是否有效。 有人能帮我吗?

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

上述代码无效,我收到了“无效日期”的错误信息。

3个回答

46

尝试使用以下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');

4

我根据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

1

我遇到了类似的问题,我认为这个解决方案也可以解决它。 我更喜欢这个解决方案,因为解析比语言环境对象更明确。

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"));


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接