2009-11-06 68 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())//任何日期的對象