使用date-fns解析多种日期格式

3

I have this code example:

function compareDate(value: string) {
  return isBefore(
    parse(value, 'dd-MM-yyyy', new Date()),
    sub(new Date(), { days: 1 })
  );
}

const test = compareDate('31-12-2020');

在parse()函数中,我需要使用dd-MM-yyyy格式,还需要支持dd/MM/yyyydd MM yyyy格式。我该如何实现?输入的值是用户输入的日期字符串,类型为String,并且可能具有上述的任意一种格式。
2个回答

4
您可以使用 isMatch 方法来确定您所拥有的字符串是哪一个:
function compareDate(value: string) {
  let start;
  if (isMatch(value, 'dd-MM-yyyy')) {
    start = parse(value, 'dd-MM-yyyy', new Date());
  } else if (isMatch(value, 'dd/MM/yyyy')) {
    // etc...
  }
  return isBefore(
    start,
    sub(new Date(), { days: 1 })
  );
}

看起来isMatch可以用来验证日期格式,很有前途。 - Brendon

2
将所有可能的分隔符替换为正确的分隔符:
function compareDate(value: string) {
  return isBefore(
    parse(value.replace(/[\/ ]/g, '-'), 'dd-MM-yyyy', new Date()),
    sub(new Date(), { days: 1 })
  )
}

const test = compareDate('31-12-2020')

我已经尝试了第二个例子,但它没有起作用。我不理解第一个例子。日期将在value中,类型为字符串,我不知道它是否会带有' - '、' / '或' '。 - Katerin1122
1
我更新了一个答案。我忘记在正则表达式中加上全局标志/g - ulou
是的,这正如预期的那样工作。谢谢! - Katerin1122
你的意思是什么?输入值长什么样子(因为之前说过对于“01/01-1987”这个值可以正常工作)?请随意提出新问题,并给出它不能正常工作的示例。 - ulou
我已经使用当前代码创建了 https://stackoverflow.com/questions/67684828/date-validation-issue。谢谢。 - Katerin1122
显示剩余3条评论

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