片刻js格式化,无需时间验证日期

时间:2018-06-15 09:22:01

标签: javascript validation date momentjs

我无法使用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"

1 个答案:

答案 0 :(得分:0)

如果您期望一系列不同的格式,我建议使用正则表达式来验证格式,然后通过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>
&#13;
&#13;
&#13;

validate a date还有其他方法。除非您有一个商定的转换为4位数年份的算法,否则强烈建议不要使用两位数年份。在javascript中,两位数年份被解析为20世纪(即&#34; xx&#34; as&#34; 19xx&#34;),但有些系统使用的帧如0到30的值在本世纪,在之前的31到99。