本文是在阅读一些好的框架的源码时看到的,在此做个记录。
为什么会有闰年?
若以陽曆為例,「年」的計算基礎是回歸年,而一個回歸年大約等於365.24220日。因為在平年西曆只計算365日,結果四年後便會累積0.24220×4=0.9688日,大約等於一日,所以便逢四年增加一日閏日以抵銷這0.9688日。 然而,累積4年後多的0.96876天,與真正的1日尚差0.03124天,故如果不間斷地按照4年1閏的方式修正,百年後將累積成365×100+25=36525日,比真正的1世紀日數365.24219×100=36524.219多。因此曆法學家便重新規定閏年的規則為:西元年份逢4的倍數閏、100的倍數不閏、400的倍數閏。例如:公元1992、1996年等為4的倍數,故為閏年;公元1800、1900、2100年為100的倍數,當年不閏;公元1600、2000、2400年為400的倍數,故有閏。
西元年份除以400可整除,或者西元年份除以4可整除但除以100不可整除,为闰年。
js
function isLeapYear(year){
return (((year%4===0)&&(year%100!==0))||(year%400===0));
}
js
//使用数组和?:,代码非常简洁
function getDaysInMonth(year,month){
return [31,(isLeapYear(year)?29:28),31,30,31,30,31,31,30,31,30,31][month];
}
//使用Swith语句感觉就是很笨重
function getDaysInMonth(year,month){
switch(month){
case 1,3,5,7,8,10,12:
return 31;
case 4,6,8,11:
return 30;
case 2:
return isLeapYear(year)?29:28;
}
}
原文:http://my.oschina.net/jast90/blog/408840