【问题标题】:Moment js formatting for validating dates without time用于验证没有时间的日期的 Moment js 格式
【发布时间】:2018-11-25 02:57:17
【问题描述】:

我无法使用 moment.js 获取有效的日期格式。我无法拒绝只有日期而不是时间的条目。

日期应为“月-日-年”格式(美式),并应包括以小时为单位的时间:分钟。

允许的格式示例:

  • 2/02/2019 0:00
  • 31/12/2019 0:00
  • 31/2/2019 00:00

这是我的代码:

moment(item["InputDate"], 'MM/DD/YYYY HH:mm', true).isValid()

如果我尝试使用严格格式选项,我将无法验证有单个数字日期或月份的日期。我通过 excel 输入从字符串类型中获取此输入。

有没有办法只检查日期是否采用上述格式并且没有时间?

编辑 1:我最终列出了有效格式并将它们添加到严格验证中,使用 moment.js 验证作为临时解决方法。但我不确定这是否是一份详尽的格式列表。 我使用以下作为有效格式列表:

  1. "MM/DD/YYYY HH:mm"
  2. "MM/D/YYYY HH:mm"
  3. "M/DD/YYYY HH:mm"
  4. "MM/DD/YY HH:mm"
  5. "MM/DD/YYYY H:mm"
  6. "M/D/YYYY HH:mm"
  7. "M/DD/YY HH:mm"
  8. "M/DD/YYYY H:mm"
  9. "M/D/YY HH:mm"
  10. "M/D/YY H:mm"
  11. "MM/D/YY HH:mm"

【问题讨论】:

  • 应该允许哪些输入?月-日-年+时间或31/12/2019 0:00(即日-月-年)?无论如何看看moment(String, String[], Boolean)
  • 谢谢。我需要允许格式为 MM/DD/YYYY HH:mm、MM/DD/YY HH:mm、m/d/YY H:mm 的日期。任何没有时间的日期都应该被拒绝。

标签: javascript validation date momentjs


【解决方案1】:

如果您期待一系列不同的格式,我建议使用正则表达式来验证格式,然后通过 moment.js 进行松散值验证。这样您就不必考虑所有可能的严格格式组合,例如

[
 '2/3/18 23:15',
 '2/3/18',
 '2/3/18 2:15',
 '2/3/2018 23:15',
 '12/13/2018 25:15', // invalid time
 '2/29/18 23:15',    // invalid date
 '12/03/2018 03:05'
].forEach(s => {
    var re = /\d\d?\/\d\d?\/\d{2,4}/;
    console.log(s + ' : ' + (re.test(s) && moment(s, 'M/D/YY HH:mm').isValid()));
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>

validate a date 还有其他方法。强烈建议不要使用两位数的年份,除非您有一个公认的算法来转换为 4 位数的年份。在javascript中,两位数的年份被解析为20世纪(即“xx”为“19xx”),但有些系统使用框架例如0到30的值是当前世纪,31到99是上一个世纪。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-08
    • 1970-01-01
    • 2018-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多