如何验证用户输入日期是使用javascript的月份的最后一天?
答案 0 :(得分:27)
(更新:请参阅底部的最后一个示例,但其余部分留作背景。)
您可以向Date
实例添加一天,看看月份是否发生变化(因为JavaScript的Date
对象会智能地修复无效的日期值),例如:
function isLastDay(dt) {
var test = new Date(dt.getTime()),
month = test.getMonth();
test.setDate(test.getDate() + 1);
return test.getMonth() !== month;
}
...或者paxdiablo指出,您可以检查生成的日期,这可能更快(少一个函数调用)并且肯定会更短:
function isLastDay(dt) {
var test = new Date(dt.getTime());
test.setDate(test.getDate() + 1);
return test.getDate() === 1;
}
Another gratuitous live example
你可以在那里嵌入更多的逻辑,以避免创建临时日期对象,如果你喜欢,因为它只是在二月才需要 ,其余的只是一个表查找,但两者的优点是上面是他们将所有日期数学推迟到JavaScript引擎。创建对象不会太昂贵而无法担心。
......最后:由于JavaScript specification要求(第15.9.1.1节)一天完全 86,400,000毫秒长(实际上是vary in length天),我们可以通过添加日期来使上述内容更短:
function isLastDay(dt) {
return new Date(dt.getTime() + 86400000).getDate() === 1;
}
答案 1 :(得分:1)
浏览器将第0天标识为上个月的最后一天
var month = 0; // January
var d = new Date(2008, month + 1, 0);
alert(d); // last day in January
如此处所示:Calculate last day of month in javascript
您只需使用用户插入的月份+ 1 day = 0 来检查他是否已插入该月的最后一天。
答案 2 :(得分:0)
假设你得到了:
var month = getMonthFromUserInput();
var year = getYearFromUserInput();
这将给出该月的最后一天
new Date((new Date(year , month , 1)) -1 )
请记住,第0个月是1月
答案 3 :(得分:0)
这是有效的。
var lastday = new Date(new Date().getFullYear(),new Date().getMonth()+1,0).getDate();
希望能帮到你。
答案 4 :(得分:0)
function isLastDayOfMonth(date){
return date.getDate() == new Date(date.getFullYear(),date.getMonth()+1,0).getDate();
}
答案 5 :(得分:0)
如果您想避免重新发明轮子并有额外的代码来维护和测试,我强烈建议您使用Moment.js或date-fns之类的外部库。
我个人提倡date-fns,因为它不像Moment那样庞大,并且依赖于Date原语而不是Moment对象。
您感兴趣的功能名为isLastDayOfMonth
,可以找到here