2011年5月1日 星期日

javascript 取得 月天數

function daysInMonth(iMonth, iYear)
{
    return 32 - new Date(iYear, iMonth, 32).getDate();
}

iMonth:0~11
iYear:西元年 yyyy

原理說明:
new Date(iYear, iMonth, 32) ,會依 年月日,產生一個日期,但是日期超過該月的部份會使產生的日期變成下個月的日期
舉例:
new Date(2011, 0, 32) ,是指要產生一個日期是 2011年1月32號的,但是因為1月只有31天,所以產生出來的時間變成是2011年2月1號,也就是自動幫你進位了。
產生出來的日期再用 .getDate()取得 "日" 的部份,最後用 32 去減。 換句話說,用32代入產生的日期不管是代到哪個月都會進位,進位後的日數,可能是1 ~ 4 不等,也就是說原本的月份日數是比32 少 1~4不等。 所以用32減去,就是所求。

變通一下,把function 內的兩個32 改成是 35或是其它 >31 但 <60 的數也是可以,只要不要讓它再次進位到下個月執行的意義和原做法就是一樣的。

參考:http://snippets.dzone.com/posts/show/2099

1 則留言:

Unknown 提到...

你貼的這個方法有點多此一舉!
日子設0, 月設上個月, 即是當月天數。

例如2012的2月份天數為
new Date(2012,2,0).getDate()