JavaScript日期对象提取天数-函数分解

JavaScript日期对象提取天数-函数分解,javascript,Javascript,简言之:有人能给我解释一下这个功能是怎么回事吗 function daysInMonth(month, year){ return new Date(year, month, 0).getDate(); } alert(daysInMonth(1, 2013)); 我真正感兴趣的是,为什么一个月后会有一个“0”?我似乎无法理解它,我试图省略它,并用“day”代替它,但两者的结果不同。此函数似乎仅在对象中传递“0”时才起作用 调用函数时另一个棘手的部分是,传递“0”和“1

简言之:有人能给我解释一下这个功能是怎么回事吗

function daysInMonth(month, year){
            return new Date(year, month, 0).getDate();
}
alert(daysInMonth(1, 2013));
我真正感兴趣的是,为什么一个月后会有一个“0”?我似乎无法理解它,我试图省略它,并用“day”代替它,但两者的结果不同。此函数似乎仅在对象中传递“0”时才起作用

调用函数时另一个棘手的部分是,传递“0”和“1”表示一月,返回相同的天数,而传递“12”和“11”表示十二月,返回不同的天数(12返回31(十二月),11返回30(十一月))。

JavaScript日期对象“修复”日期设置没有意义。请求一个月中的第0天的日期实例将为您提供上个月最后一天的日期

月份从零开始编号,但该函数的编写方式就好像月份从1开始编号一样。因此,当你通过0或1作为月数时,你会得到相同的答案,因为你得到的是12月和1月的天数,而这两个月都有31天

就我个人而言,我不会那样写函数;因为有必要记住,在JavaScript中月份是从零开始的,所以我编写了如下函数:

function daysInMonth(month, year){
   return new Date(year, month + 1, 0).getDate();
}
var janDays = daysInMonth(0, 2015);
然后,要获得一月份的天数,您可以这样称呼它:

function daysInMonth(month, year){
   return new Date(year, month + 1, 0).getDate();
}
var janDays = daysInMonth(0, 2015);

关键是JS日期对象构造函数。此函数接受多个参数,但需要三个参数:年、月、日。day param是一个月的一天,该月的第一天编号为1。上面的代码非常复杂。根据JS引用,传递0表示日期,实际结果为上个月的最后一天。所以这实际上解释了你的白天问题,以及最后的月份问题

有关更多信息,请参阅:

通过0和1实际上并不都代表1月——1代表前一年的1月,0代表前一年的12月,也有31天!(试着在一年后的闰日运行此功能,它们的天数不会相同)

编辑:示例 要更好地了解实际发生的情况,请尝试运行以下函数:

function check() {
    console.log(new Date(2015, 0, 0).toISOString());  // 2014-12-31T08:00:00.000Z
    console.log(new Date(2015, 1, 0).toISOString());  // 2015-01-31T08:00:00.000Z
    console.log(new Date(2015, 11, 0).toISOString());  // 2015-11-30T08:00:00.000Z
    console.log(new Date(2015, 12, 0).toISOString());  // 2015-12-31T08:00:00.000Z
}

那么,如果
1
代表某个月的第一天,那么它的前一天是哪一天?@zerkms你确定吗?它不会将第12个月视为第0个月吗?我确信它会失败,但我应该先检查它。斗争还在继续,我已经阅读了date对象一段时间了,知道每个月表示的索引可以避免很多麻烦。我目前正在学习JavaScript,所以如果我还有更多关于@zerkms的问题要补充的话,我希望你能接受。0是一场噩梦,现在这扩展了我对@slessans的理解