【问题标题】:Validate Date FORMAT (not date string) using MomentJS?使用 MomentJS 验证日期格式(不是日期字符串)?
【发布时间】:2017-11-19 14:52:46
【问题描述】:

我看到您可以使用“.isValid()”函数来检查给定字符串是否为日期格式:

moment('2007-05-05', 'YYYY-MM-DD', true).isValid()

但是有没有办法确认 格式 是正确的?例如:

'YYYY-MM-DD' 应该返回true,但是

'YYYY-MM-DDsadsadl' 应该返回 false,因为字符串末尾的字符不是有效的 DateTime 字符。

我们正在开发一种工具,该工具允许用户输入现有的日期格式,然后输入第二个输入以输入所需的格式,但我们需要验证以确保字符串可以正确解析和转换,但它们不是t 输入特定日期。

应用程序必须接受任何和所有可能的日期格式。

【问题讨论】:

    标签: validation date datetime format momentjs


    【解决方案1】:

    使用以下函数来验证您的格式。

    validFormat = function(inputFormat){
      var validation = moment(moment('2017-06-17').format(inputFormat), inputFormat).inspect(); 
      if(validation.indexOf('invalid') < 0) 
        return true; 
      else 
        return false;
    }
    

    请花一些时间来理解这一点。这只是使用inspect() 进行反向验证。日期2017-06-17 可以替换为任何有效日期。 这个Moment Js Docs 将帮助您识别有效的格式。

    只需调用这个函数

    validFormat('YYYY MM DD')
    

    【讨论】:

    • 感谢您的帮助!这似乎可以解决问题。我一定会阅读相关内容,我一定要确保我掌握了这个函数的作用。
    • 这总是为我返回false
    • 对于有效的日期格式如“DD/MM/YYYY”返回false
    【解决方案2】:
    const getIsValid = inputFormat => moment(moment().format(inputFormat), inputFormat).isValid()
    

    说明:

    moment().format(inputFormat) - 从该格式的当前时间创建一个日期字符串

    然后用moment() 包装,使该字符串成为moment 日期对象,定义解析它的格式。最后我们调用moment 日期对象的isValid() 属性。这确保我们能够使用我们的自定义格式创建和解析 moment

    【讨论】:

    • 这也会发出弃用警告
    • 考虑到moment 不再积极开发,我无法想象有什么麻烦。我也很确定我们在我们的应用程序中使用了这个确切的解决方案,我不记得看到任何弃用警告。您看到的警告是什么?
    • 实际上我们修复了一个错误,所以我更新了答案以包含该修复。
    • 确实抑制了弃用警告!并适用于包括文字在内的复杂格式。
    猜你喜欢
    • 2017-03-23
    • 2018-06-26
    • 1970-01-01
    • 2016-11-23
    • 2021-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多