我指的是这个link,因为我没有50个声望,所以我不允许在答案中发表评论,所以发布这个问题。我没有得到声明,你可以看到一个月从几个月减去。这可能很简单,但有人可以澄清一下吗?
var m =匹配1 - 1;吗
function isValidDate(date)
{
var matches = /^(\d{2})[-\/](\d{2})[-\/](\d{4})$/.exec(date);
if (matches == null) return false;
var d = matches[2];
var m = matches[1] - 1;
var y = matches[3];
var composedDate = new Date(y, m, d);
return composedDate.getDate() == d &&
composedDate.getMonth() == m &&
composedDate.getFullYear() == y;
}
答案 0 :(得分:1)
var m = matches1 - 1; ?
months
索引从0开始。
因此,当您认为Jan为1
时,0
时实际为date.getMonth()
。
当您从日期字符串中获取1
时,需要在将其设置为日期对象之前将其设为0
。
答案 1 :(得分:0)
在问题的背景下,验证功能过于夸张。只需要检查月份,因为如果日期或月份超出界限,生成日期的月份将会改变。
此外,正则表达式可以大大简化,考虑(假设输入是美国的m / d / y格式):
/* Validate a date string in US m/d/y format
** @param {string} s - string to parse
** separator can be any non–digit character (.-/ are common)
** leading zeros on values are optional
** @returns {boolean} true if string is a valid date, false otherwise
*/
function validateMDY(s) {
var b = s.split(/\D/);
var d = new Date(b[2],--b[0],b[1]);
return b[0] == d.getMonth();
}
var testData = ['2/29/2016', // Valid - leap year
'2/29/2015', // Invalid - day out of range
'13/4/2016', // Invalid - month out of range
'13/40/2016', // Invalid - month and day out of range
'02/02/2017']; // Valid
document.write(testData.map(function(a) {
return a + ': ' + validateMDY(a);
}).join('<br>'));
&#13;