我正在对2013年12月36日(DD / MM / YYYY),2013年2月15日(DD / MM / YYYY)或以下具体案例的无效日期进行验证:
29/02/2009 (DD / MM / YYYY)在2009年无效不闰年
代码是:
var momentAcceptedDateInputs = ['D/M/YY', 'DD/M/YY','D/MM/YY','DD/MM/YY'
, 'D/M/YYYY', 'DD/M/YYYY', 'D/MM/YYYY', 'DD/MM/YYYY',
'D MMM YY', 'DD MMM YY', 'D MMM YYYY', 'DD MMM YYYY'];
var parsedDate = moment(val, momentAcceptedDateInputs);
return parsedDate.isValid();
输入值:
29/02/2009
预期对象的返回值:
实际对象的返回值:
知道怎么解决这个问题吗?
我使用的是定制版本的moment.js版本:2.4.0
我定制的唯一规则是这样,所以我怀疑它会导致上面报告的错误:
datePartArray[YEAR] = toInt(input) +
(toInt(input) > (moment(moment()).format("YY")) ? 1900 : 2000);
答案 0 :(得分:6)
默认情况下,Moment的解析器非常宽容。
例如:
moment("29/02/2009",'D/M/YY').isValid() // true, because it uses year "20"
您可以通过传递布尔值
来更改此值moment("29/02/2009",'D/M/YY', true).isValid() // false, due to the year digits
答案 1 :(得分:1)
至于时刻-2.10.6,
moment("29/02/2009", "DD/MM/YYYY").isValid();
即使没有严格的解析标志,现在返回 false 。
此外,documentation表示可以通过“替换moment.parseTwoDigitYear方法”来自定义两位数年份的解析。
类似的东西:
var moment = require("moment");
var myMoment = module.exports = moment;
moment.parseTwoDigitYear = function(year) {
return ((year > 20)? 1000:2000) + parseInt(year);
}
然后
myMoment = require('./myMoment');
date = myMoment("28/02/67", "DD/MM/YYYY");
console.log(date.year());
返回 1067 (不是 2067 )。