码迷,mamicode.com
首页 > 其他好文 > 详细

代码简洁之道(1)-年份

时间:2015-05-01 10:48:43      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:

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;
    }
}



好的代码就像好的文章不是一朝一夕就能写出的,也需要经过多次的修改。

代码简洁之道(1)-年份

标签:

原文地址:http://my.oschina.net/jast90/blog/408840

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!