如何使用javascript验证日期是否为一个月的最后一天?

如何使用javascript验证日期是否为一个月的最后一天?,javascript,Javascript,如何使用javascript验证用户输入日期是一个月的最后一天?(更新:请参见底部的最后一个示例,但其余部分作为背景。) 您可以在Date实例中添加一天,查看月份是否发生变化(因为JavaScript的Date对象智能地修复了无效的月份值),例如: …或者如前所述,您可以检查每月的结果日,这可能会更快(少调用一个函数),而且肯定会短一点: function isLastDay(dt) { var test = new Date(dt.getTime()); test.setDa

如何使用javascript验证用户输入日期是一个月的最后一天?

更新:请参见底部的最后一个示例,但其余部分作为背景。)

您可以在
Date
实例中添加一天,查看月份是否发生变化(因为JavaScript的
Date
对象智能地修复了无效的月份值),例如:

…或者如前所述,您可以检查每月的结果日,这可能会更快(少调用一个函数),而且肯定会短一点:

function isLastDay(dt) {
    var test = new Date(dt.getTime());
    test.setDate(test.getDate() + 1);
    return test.getDate() === 1;
}

如果愿意,您可以在其中嵌入更多的逻辑,以避免创建临时日期对象,因为它实际上只在2月份才需要,其余的只是一个表查找,但以上两种方法的优点是,它们将所有日期计算推迟到JavaScript引擎。创建对象的成本不会高到令人担忧的程度


…最后一点:由于要求(第15.9.1.1节)一天的长度正好是86400000毫秒(实际上是几天),我们可以通过添加一天来缩短上述时间,因为我们:

function isLastDay(dt) {
    return new Date(dt.getTime() + 86400000).getDate() === 1;
}

浏览器将第0天标识为上个月的最后一天

var month = 0; // January
var d = new Date(2008, month + 1, 0);
alert(d); // last day in January
如图所示:

您只需使用用户插入的月份+1天=0来检查他是否插入了该月的最后一天。

假设您得到:

var month = getMonthFromUserInput();
var year = getYearFromUserInput();
这将给出该月的最后一天

new Date((new Date(year , month , 1)) -1 )
记住,第0个月是一月,这是有效的

var   lastday   =   new   Date(new   Date().getFullYear(),new   Date().getMonth()+1,0).getDate();

希望能对您有所帮助。

如果您不想重新发明轮子,也不想有额外的代码需要维护和测试,我强烈建议您使用外部库,如Moment.js或date fns

function isLastDayOfMonth(date){
    return date.getDate() == new Date(date.getFullYear(),date.getMonth()+1,0).getDate();
}
我个人主张使用date fns,因为它不像Moment那样庞大,并且依赖于日期原语而不是Moment对象


您感兴趣的函数名为
isLastDayOfMonth
,可以找到

一个简单的开关怎么样,case?@Gunner:不一定那么简单。这并不是那么复杂,如果你坚持使用现代的日期,但即使这样,你也可以在代码中嵌入整个“闰年,每四年一次,除了世纪之外,除了世纪可以被400整除”的东西……好吧……JavaScript引擎已经有了它。:-)+1,与我发布的内容类似(尽管检查的是月日是否为1,而不是月份是否不同),但你用代码击败了我,因此我将其删除:-)@paxdiablo:我正要在你的示例中进行编辑…但你击败了我。谢谢。@T.J.克劳德:这并不能保证这是今年本月的最后一天。@Shef:我不明白你的意思。这一年与它有什么关系?@T.J.Crowder:我认为问题是验证当月的输入日期(通知日期)。如果用户给我们提供了2010年6月30日23:59:59,您的函数会返回什么?当然,它会返回true,因为
June 30,20102010 23:59:59
June 30,20112011 23:59:59
具有相同的月份最后一天。
function isLastDayOfMonth(date){
    return date.getDate() == new Date(date.getFullYear(),date.getMonth()+1,0).getDate();
}