我一直在使用这个函数,但我想知道获取它的最有效和准确的方法是什么。
function daysInMonth(iMonth, iYear) {
return 32 - new Date(iYear, iMonth, 32).getDate();
}
发布于 2008-11-24 22:44:30
function daysInMonth (month, year) { // Use 1 for January, 2 for February, etc.
return new Date(year, month, 0).getDate();
}
console.log(daysInMonth(2, 1999)); // February in a non-leap year.
console.log(daysInMonth(2, 2000)); // February in a leap year.
第0天是上个月的最后一天。因为month构造函数是从0开始的,所以它工作得很好。这是一个小技巧,但这基本上就是你减去32的结果。
发布于 2011-03-29 19:44:50
如果您经常调用此函数,则缓存该值以获得更好的性能可能很有用。
以下是FlySwat's answer的缓存版本
var daysInMonth = (function() {
var cache = {};
return function(month, year) {
var entry = year + '-' + month;
if (cache[entry]) return cache[entry];
return cache[entry] = new Date(year, month, 0).getDate();
}
})();
发布于 2015-07-14 18:10:59
为了消除混淆,我可能会将月份字符串设置为基于,因为它当前是从0开始的。
function daysInMonth(month,year) {
monthNum = new Date(Date.parse(month +" 1,"+year)).getMonth()+1
return new Date(year, monthNum, 0).getDate();
}
daysInMonth('feb', 2015)
//28
daysInMonth('feb', 2008)
//29
https://stackoverflow.com/questions/315760
复制相似问题