标签:
本文是在阅读一些好的框架的源码时看到的,在此做个记录。
为什么会有闰年?
若以陽曆為例,「年」的計算基礎是回歸年,而一個回歸年大約等於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