㈠閏年是如何來的?
閏年(Leap Year)是為了彌補因人為歷法規定造成的年度天數與地球實際公轉周期的時間差而設立的。補上時間差的年份為閏年。
㈡什么是閏年?
凡陽歷中有閏日(二月為二十九日)的年,或陰歷中有閏月(一年有十三個月)的年;閏余(歲余置閏。陰歷每年與回歸年相比所差的時日)。
閏年共有366天(1-12月分別為31天,29天,31天,30天,31天,30天,31天,31天,30天,31天,30天,31天)。
㈢閏年分類
⑴平年為365天,閏年為366天
⑵閏年是公歷中的名詞。閏年分為普通閏年和世紀閏年。
⑶普通閏年:公歷年份是4的倍數的,一般是閏年。
⑷世紀閏年:公歷年份是整百數的,必須是400的倍數才是閏年。
㈣簡潔判斷閏年的方法
★按一回歸年365天5小時48分45.5秒。
⑴普通年能被4整除且不能被100整除的為閏年。(如2004年就是閏年,1901年不是閏年)
⑵世紀年能被400整除的是閏年。(如2000年是閏年,1900年不是閏年)
⑶對於數值很大的年份,這年如果能整除3200一般不是閏年,但是如果能整除172800則是閏年。
如172800年是閏年,86400年不是閏年(因為雖然能整除3200,但不能整除172800)(此按一回歸年365天5h48'45.5''計算)。
㈤閏年與閏月
㈥陽歷閏年
⑴陽歷閏年共有366天(1-12月分別為31天,29天,31天,30天,31天,30天,31天,31天,30天,31天,30天,31天),
⑵地球繞太陽運行周期為365天5小時48分46秒(合365.24219天)即一回歸年(tropical year)。公歷的平年只有365日,比回歸年短約0.2422 日,所余下的時間約為四年累計一天,故四年於2月加1天,使當年的歷年長度為366日,這一年就為閏年。現行公歷中每400年有97個閏年。
⑶按照每四年一個閏年計算,平均每年就要多算出0.0078天,這樣經過四百年就會多算出大約3天來,因此,每四百年中要減少三個閏年。所以規定,公歷年份是整百數的,必須是400的倍數的才是閏年,不是400的倍數的,雖然是4的倍數,也是平年,這就是通常所說的: 四年一閏,百年不閏,四百年再閏。 例如,2000年是閏年,1900年則是平年。
㈦公歷閏年
⑴農歷閏年由於比平年(354天)多一個月,所以實際上為383天或者384天(具體閏哪個月是由節氣情況決定的)。
⑵中國舊歷農歷作為陰陽歷的一種,每月的天數依照月虧而定,一年的時間以12個月為基准,平年比一回歸年少約11天。為了合上地球圍繞太陽運行周期即回歸年,每隔2到4年,增加一個月,增加的這個月為閏月。閏月加到哪個月,以農歷歷法規則推斷,主要依照與農歷的二十四節氣相符合來確定。在加有閏月的那一年有13個月,歷年長度為384或385日,這一年也稱為閏年。如1984年鼠年的農歷中,有兩個十月,通常成為前十月和后十月(即閏月)。農歷閏年閏月的推算,3年一閏,5年二閏,19年七閏;農歷基本上19年為一周期對應於公歷同一時間。如公歷的2001年5月27日、1982年5月27日和1963年5月27日這個日子,都是閏四月初五。
⑶農歷(即中國的陰歷)的歷月是以朔望月為依據的。朔望月的時間是29日12小時44分3秒(即29.5366日),因此農歷是大月30天,小月29天。農歷是基本上以12個月作為一年的,但12個朔望月的時間是354.3667日,和回歸年比起來要相差11天左右。這樣每隔3年就要多出33天,即大約多出一個多月。 為了要把多余的日數消除,每隔3年就要加一個月,這就是農歷的閏月。有閏月的一年也叫閏年,所以民間又有“三年兩閏,三年兩不閏”的說法。所以農歷的閏年就有13個月了。至於閏哪個月是由節氣情況決定的。
㈧計算方法
☀文字敘述
⑴按一回歸年365天5h48'45.5''計算
⑵一年日數必須是整數,不便將零時數計入,所以取365天為一年,則余5時48分46秒
⑶積至4年約滿一 日,所以4年一“閏日”,謂之“閏年”,無“閏日”之年為平年,即平年365天,閏年366天
⑷但到4年之時,僅有23時15分4秒閏一日。 但是欠缺44分56秒
⑸積至100年(25閏)時就欠缺18時43分20秒,約合3 / 4日,所以滿100年不閏
⑹此時又余5時16分40秒,積至400年余21時6分40秒又閏
⑺又欠缺2時53分20秒,積至3200年計欠缺23時6分40秒,所以滿3200年不閏
⑻此時又余53分20秒,積至86400年剛好24 時又一閏,這是不余不欠。
所以:判定公歷閏年應遵循的一般規律為:四年一閏,百年不閏,四百年再閏.
★數學公式計算
function isLeapYear(year){ if((year/4==Math.floor(year/4)&&year/100!=Math.floor(year/100))||(year/400==Math.floor(year/400)&&year/3200!=Math.floor(year/3200))||year/172800==Math.floor(year/172800)){ return true } return false }