0

我有以下脚本来检查日期是否有效:

var text = '2/31/2013'; 
var comp = text.split('/'); 
var m = parseInt(comp[0], 10); 
var d = parseInt(comp[1], 10); 
var y = parseInt(comp[2], 10); 
var date = new Date(y,m-1,d); 
if(date.getFullYear() == y && date.getMonth() + 1 == m && date.getDate() == d) {
    console.log('Valid date'); 
}
else {
    console.log('Invalid date');
    var NextValidDate = new Date(y,m-1,d+1);
    console.log(NextValidDate);    
}

我现在想跳到下一个正确的日期。在示例案例中,这是 2012 年 3 月 1 日。

但是如何获得呢?NextValidDate给出的日期并不总是正确的。

4

3 回答 3

1
var originalDate = new Date(2013, 2, 31);
var nextDate = new Date(originalDate.getFullYear(), originalDate.getMonth(), originalDate.getDay() + 1);
于 2013-06-21T20:28:28.590 回答
1

根据您的逻辑,如果日期不存在(仅当该月的天数少于作为输入提供的天数时才会发生),则下个月的第一天是下一个“正确”日期。

在这种情况下,您可以通过在月份中添加一个来创建下一个有效日期并将天数设置为1

var NextValidDate = new Date(y, (m-1) + 1, 1);
于 2013-06-21T20:41:16.547 回答
0

部分问题是大多数浏览器将解释new Date(2013, 1, 31)March 4, 2013(或2/28/2013 + 3 days)。因此,虽然:

date.getFullYear() == y && date.getMonth() + 1 == m && date.getDate() == d

返回false,解析的日期仍然是技术上有效的日期。m/d/y如果输入的事件与m/d/y解析的不同,我怀疑您只是想提前到下个月。如果是这种情况,请选择nextValidDate下个月的第一天:

var text = '2/31/2013',
    comp = text.split('/'),
    m = parseInt(comp[0], 10),
    d = parseInt(comp[1], 10),
    y = parseInt(comp[2], 10),
    date = new Date(y, m - 1, d),
    nextValidDate;
if (date.getFullYear() === y && date.getMonth() + 1 === m && date.getDate() === d) {
    console.log('Valid date'); 
} else {
    console.log('Invalid date');
    nextValidDate = new Date(y, m, 1);
    console.log('Next valid date: ' + nextValidDate);
}
于 2013-06-21T20:48:14.993 回答