2009-11-06 82 views
2
function GetDaysInMonth(month, year) 
    { 
     return 32 - new Date(year, month, 32).getDate(); 
    } 

好吧,我不明白这是什么,具体干什么的,这一部分:这个“日月”功能如何工作?

new Date(year, month, 32).getDate(); 

我知道什么getDate()呢,后来我在JavaScript抬头Date但在这个特殊的例子,我不你明白为什么你会在这里传球32次。这怎么可能回到你传递给它的任何月份和年份的天数?

+0

实际上它是在二月31日返回的,所以这件事情甚至都不起作用。我只是生气,因为我的老板只是告诉我如何减少30行代码,但是他告诉我使用的fing函数甚至不起作用!不是我无法修复它,但你知道有时候,代码评论是如何承认asswipes的。 – PositiveGuy 2009-11-06 18:45:43

+0

我应该刚刚查过这个方法,它被盗了:http://snippets.dzone.com/posts/show/2099 – PositiveGuy 2009-11-06 18:55:36

回答

12

任何月份的“第32天”将转入下一个月。如果一个月有31天,“第32天”将是下个月的第一天。如果有30个,“第32日”将是下个月的第2个月。如果有28个,“第32日”将是下个月的第4个。

从32中减去其中的任何一个,就会得到正确的数字。

+0

所以可以说我在2009年2月通过。好吧,然后通过32应该给我4与该GetDate()。然后你采取32-4 ...是否正确?那么为什么然后我得到31回来仍然为2月 – PositiveGuy 2009-11-06 18:50:04

+0

该方法甚至不工作2月 – PositiveGuy 2009-11-06 18:54:26

+6

32 - 新日期(2009,1,32).getDate() 返回对我来说。请记住,月份是基于零的。 – 2009-11-06 19:06:33

-1

试试这个:

function GetDaysInMonth(month, year) { 
    return (new Date(new Date(year, month, 1, 0, 0, 0, 0)-86400000)).getDate(); 
} 

这是使用前述一个月,并从中substracts一天(86400000个milloseconds)的第一天,以获得给定月份的最后一天。请注意,Date月份参数预计值为0(1月)至11(12月)。但对于GetDaysInMonth使用1(1月)到12(十二月):

GetDaysInMonth(12, 2007) // returns 31 
GetDaysInMonth(1, 2008) // returns 31 
GetDaysInMonth(2, 2008) // returns 29 

如果你想使用作为Date相同的值,使用new Date(year, month+1, 1, 0, 0, 0, 0)代替。

+1

我不明白你的意思,1,0,0是什么,以及-864000 – PositiveGuy 2009-11-06 18:48:02

+0

@coffeeaddict:阅读手册:https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/日期 – Gumbo 2009-11-06 19:41:35

1
Date.prototype.monthDays: function(){ 
var d= new Date(this.getFullYear(), this.getMonth()+1, 0); 
return d.getDate(); 
} 

下个月的日期是本月的最后日期......

警报(新的Date()。monthDays())//任何日期的对象