使用 JavaScript 获取指定月份的天数?

IT技术 javascript
2021-01-22 12:07:23

可能的重复:
使用 javascript 确定一个月中的天数的最佳方法是什么?

假设我有月份和年份。

4个回答
// Month in JavaScript is 0-indexed (January is 0, February is 1, etc), 
// but by using 0 as the day it will give us the last day of the prior
// month. So passing in 1 as the month number will return the last day
// of January, not February
function daysInMonth (month, year) {
    return new Date(year, month, 0).getDate();
}

// July
daysInMonth(7,2009); // 31
// February
daysInMonth(2,2009); // 28
daysInMonth(2,2008); // 29
@SamGoody,如果您对 daysInMonth 的月份输入是基于 1 的,则该函数似乎可以正常工作。也就是说,例如 June = 6。
2021-03-15 12:07:23
所以每个想知道为什么 new Date(2012, 5, 0).getDate() 返回 31.. 第 5 个月(以 1 为基础)是 May 而不是 6 月的人
2021-03-26 12:07:23
在 Javascript 中是基于 0 的,所以虽然这看起来是对的,但它与其他 javascript 函数不一致
2021-04-01 12:07:23
我发现这有点令人困惑,所以澄清一下,以防它对任何人有帮助:对于 Javascript 日期函数,第二个参数是月,从 0 开始。第三个参数是日,从 1 开始。当你将 0 传递给第三个时相反,它使用上个月的最后一天。如果您将 -1 作为第三个参数传递,它将是上个月的倒数第二天(递减)。这就是为什么这样做有效,但是月份必须从 1 开始,而不是像 Javascript 日期一样正常的 0,因为它实际上切换到上个月,因为天数是 0。
2021-04-04 12:07:23
使用0as the day的点是它返回上个月的最后一天,所以你必须添加1到它来返回正确的使用天数month = new Date().getMonth()
2021-04-11 12:07:23
Date.prototype.monthDays= function(){
    var d= new Date(this.getFullYear(), this.getMonth()+1, 0);
    return d.getDate();
}
据我了解,new Date(year, month, 0)将产生上个月的最后一天,因此将+ 1参数添加到当前月份的天数中。我不在这里纠正任何东西。我正在努力确保我理解,并且我相信 kennebec 的答案是正确的答案。
2021-03-18 12:07:23
@Brent 你理解正确。此外,此功能尊重 Javscript 月份为 0,这很好且方便
2021-03-23 12:07:23
这是正确的答案,而不是上面的答案。
2021-03-29 12:07:23

以下采用任何有效的日期时间值并返回相关月份的天数......它消除了其他两个答案的歧义......

 // pass in any date as parameter anyDateInMonth
function daysInMonth(anyDateInMonth) {
    return new Date(anyDateInMonth.getFullYear(), 
                    anyDateInMonth.getMonth()+1, 
                    0).getDate();}
是的,明年一月就结束了。
2021-03-13 12:07:23
@rescuecreative,它会像这样工作++(anyDateInMonth.getMonth()) ??
2021-03-26 12:07:23
当我调用它时抛出错误:daysInMonth(new Date())。
2021-04-01 12:07:23
是的,只需更改++anyDateInMonth.getMonth()anyDateInMonth.getMonth() + 1
2021-04-03 12:07:23
@CharlesBretana 不,问题是您的增量运算符导致引用错误。当您使用++JavaScript 时,期望您使用它来增加可变值,例如存储在变量中的值。例如,你不能做,++5但你可以做var x = 5; ++x因此,在您的函数中,如果您不想使用变量,则必须实际添加 1。
2021-04-08 12:07:23

另一种可能的选择是使用Datejs

然后你可以做

Date.getDaysInMonth(2009, 9)     

虽然为这个功能添加一个库是矫枉过正的,但知道你可以使用的所有选项总是很好:)

什么是isLeapYear(这不是内置函数)
2021-03-13 12:07:23
这是他们在 Datejs 中使用的函数: return [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];
2021-03-29 12:07:23