1.说明
本文是在阅读一些好的框架的源码时看到的,在此做个记录。
2.具体内容
2.1判断年份是否是闰年
2.1.1前言
为什么会有闰年?
若以陽曆為例,「年」的計算基礎是回歸年,而一個回歸年大約等於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的倍數,故有閏。
2.1.2规则
西元年份除以400可整除,或者西元年份除以4可整除但除以100不可整除,为闰年。
2.1.3实现
js
function isLeapYear(year){ return (((year%4===0)&&(year%100!==0))||(year%400===0)); }
2.2.取得某一年中某个月的天数
2.2.1规则
某年某月的天数,最主要的区别是1,3,5,7,8,10,12是31天的4,6,9,11是30天的,2月是要根据是否是闰年来取决多少天的,闰年29天,平年28天。
2.2.2实现
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; } }
好的代码就像好的文章不是一朝一夕就能写出的,也需要经过多次的修改。
时间: 2024-10-18 03:17:22