【问题标题】:How to validate date with Moment.js to a specified format?如何使用 Moment.js 将日期验证为指定格式?
【发布时间】:2018-03-17 20:13:30
【问题描述】:

我无法找到有关如何使用 moment.js 验证日期输入以确保其格式为“2017-12-31T23:59:59Z”的现有问题/答案。

鉴于我将日期作为字符串“2017-12-31T23:59:59Z”,如何验证日期字符串是否严格采用指定格式“YYYY-MM-DDThh:mm: ssZ”。

我尝试了以下方法,但似乎对我不起作用。

var dateTime = "2017-12-31T23:59:59Z";
var utc = moment(dateTime, "YYYY-MM-DDThh:mm:ssZ", true)
var isUTC = utc.isValid(dateTime);

console.log(isUTC);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>

谁能提供几个例子?

提前致谢 -R

【问题讨论】:

  • 将您的代码转换为可运行的 sn-p 表明它工作正常。问题出在const moment = require('moment')
  • 我认为它应该返回 true,而不是。除非我的格式规范无效?
  • 0-23小时请使用大写HH,01-12小时请使用小写hh
  • 抱歉,我找不到问题的编辑按钮。以下是我在@vincenzoc 的建议之后的尝试: var validDateUTC = (dateTime) => { const DATE_FORMAT = "YYYY-MM-DDTHH:mm:SSZ";常量 DATE_LENGTH = 20; var isUTC = false; if (dateTime.length===DATE_LENGTH) { const moment = require('moment'); var utc = moment(dateTime, DATE_FORMAT, true); isUTC = utc.isValid(dateTime); } 返回是UTC; };
  • 为了测试上面的函数,我在 Chai 中有一些代码: describe('UTC date time validation', () => { it('should be a valid date', () => { const dateTime = "2017-12-31T23:59:59Z"; assert.isTrue(validation.validDateUTC(dateTime)); }); }); // 现在好像可以了,但是不知道是不是有效???

标签: javascript validation date momentjs


【解决方案1】:

Moment 标记区分大小写,你应该使用大写的HH 来解析0-23 小时,hh 用于解析1-12。请参阅moment(String, String, Boolean) 文档。

这里是一个活生生的例子:

var dateTime = "2017-12-31T23:59:59Z";
var utc = moment(dateTime, "YYYY-MM-DDThh:mm:ssZ", true)
var isUTC = utc.isValid();
console.log(isUTC);

utc = moment(dateTime, "YYYY-MM-DDTHH:mm:ssZ", true)
isUTC = utc.isValid();
console.log(isUTC);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>

【讨论】:

  • 谢谢!这对我来说很好。只是偶然发现了 hh 和 HH。
猜你喜欢
  • 2015-07-19
  • 2020-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多