【问题标题】:Parse multiple formats with date-fns使用 date-fns 解析多种格式
【发布时间】:2021-08-10 19:19:05
【问题描述】:

我有这个代码示例:

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。我怎样才能做到这一点? 该值将具有用户键入的日期,typeof String,并且看起来像上面的示例。

【问题讨论】:

    标签: javascript reactjs date-fns


    【解决方案1】:

    用正确的分隔符替换所有可能的分隔符:

    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,typeof String,不知道是带'-','/'还是''
    • 我已经更新了一个答案。我在正则表达式中忘记了全局标志 /g
    • 是的,这是按预期工作的。谢谢!
    • 我有一个关于这个正则表达式的新问题,它不验证日期格式“01/01-1987”。它应该验证重复的“-”m“/”或“”知道我应该如何修改这个正则表达式?
    • 这就是它的作用,你不必将- 添加到正则表达式,因为它已经被正确的分隔符“替换”了。我检查了01/01-1987 的正则表达式,它正确返回01-01-1987。您确定您的代码没有其他问题吗?因为这看起来是正确的
    【解决方案2】:

    您可以使用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 })
      );
    }
    

    【讨论】:

      猜你喜欢
      • 2011-03-19
      • 2021-12-07
      • 2020-05-10
      • 2021-11-14
      • 2021-01-23
      • 2021-01-07
      • 2021-01-29
      • 2020-09-01
      • 2021-08-03
      相关资源
      最近更新 更多