javascript中怎麼擷取農曆程式碼

來源:互聯網
上載者:User

 

擷取農曆

農曆月的天數是一個變數,有時是 29 天,有時是 30 天。

農曆每月的第一天是月亮全黑的日子。

農曆年由 24 個節氣來確定,節氣則由太陽的角度來確定。農曆的第一個節氣叫 雨水,定在太陽的角度為 330 度的日子。其餘的 23 個節氣分別定在太陽的角度 每變化 15 度的日子。下面的表格列出了 24 個節氣的名稱和定義:

命稱    角度    西曆日期      周期

立春     315     2月 4日

雨水     330     2月19日    29.8天

驚蟄     345     3月 6日

春分       0     3月21日    30.2天

清明      15     4月 5日

穀雨      30     4月20日    30.7天

立夏      45     5月 6日

夏滿      60     5月21日    31.2天

芒種      75     6月 6日

夏至      90     6月22日    31.4天

小暑     105     7月 7日

大暑     120     7月23日    31.4天

立秋     135     8月 8日

處暑     150     8月23日    31.1天

白露     165     9月 8日

秋分     180     9月23日    30.7天

寒露     195    10月 8日

霜降     210    10月24日    30.1天

立冬     225    11月 8日

小雪     240    11月22日    29.7天

大雪     255    12月 7日

冬至     270    12月22日    29.5天

小寒     285     1月 6日

大寒     300     1月20日    29.5天

24 個節氣中有 12 個是主節氣:雨水,春分,穀雨,夏滿,夏至,大暑,處暑, 秋分,霜降,小雪,冬至,大寒。

農曆年跟天文年相差較大。農曆常年有十二個農曆月,有 353,354,或者 355 天,比天文年少大約 11 天。為了跟天文年同步,每隔三個農曆常年左右,必需設 一閏年。閏年有十三個月,添加的這個月叫閏月。

農曆十二個月的名稱分別為:正月,二月,三月,四月,五月,六月,七月,八 月,九月,十月,冬月,臘月。

農曆閏年閏月的確定比較難,閏月農曆演算法有兩條:

•一:冬至必須落在農曆冬月。如果落不上,臘月之前就要添上一個月,成為閏 年。
•二:如果是閏年,冬月後邊第一個不含主節氣的月份定為閏月。閏月使用前一 月份的名稱。
農曆年以 60 年為一周期,每年的名稱由 10 個天乾的一個字和 12 個地支的一 個字排列而成。

10 天幹為:

•甲,乙,丙,丁,戊,己,庚,辛,壬,癸。
12 地支 為:

•子,醜,寅,卯,辰,巳,午,未,申,酉,戌,亥。
•12 地支有 12 動物生肖 與其對應:
鼠,牛,虎,兔,龍,蛇,馬,羊,猴,雞,狗,豬。
跟據曆史記載,農曆年已經經過了 78 個周期。今年,西曆2010 年,是第 79 個周期的第 28 年,也就是農曆第 4707 年

 代碼如下 複製代碼

<script type="text/javascript">
<!-- 
var now=new Date(); 
// -->
</script>     
<script language=javascript>
<!-- 
var lunarinfo=new Array(0x04bd8,0x04ae0,0x0a570,0x054d5,0x0d260,0x0d950,0x16554,0x056a0,0x09ad0,0x055d2,     
0x04ae0,0x0a5b6,0x0a4d0,0x0d250,0x1d255,0x0b540,0x0d6a0,0x0ada2,0x095b0,0x14977,     
0x04970,0x0a4b0,0x0b4b5,0x06a50,0x06d40,0x1ab54,0x02b60,0x09570,0x052f2,0x04970,     
0x06566,0x0d4a0,0x0ea50,0x06e95,0x05ad0,0x02b60,0x186e3,0x092e0,0x1c8d7,0x0c950,     
0x0d4a0,0x1d8a6,0x0b550,0x056a0,0x1a5b4,0x025d0,0x092d0,0x0d2b2,0x0a950,0x0b557,     
0x06ca0,0x0b550,0x15355,0x04da0,0x0a5d0,0x14573,0x052d0,0x0a9a8,0x0e950,0x06aa0,     
0x0aea6,0x0ab50,0x04b60,0x0aae4,0x0a570,0x05260,0x0f263,0x0d950,0x05b57,0x056a0,     
0x096d0,0x04dd5,0x04ad0,0x0a4d0,0x0d4d4,0x0d250,0x0d558,0x0b540,0x0b5a0,0x195a6,     
0x095b0,0x049b0,0x0a974,0x0a4b0,0x0b27a,0x06a50,0x06d40,0x0af46,0x0ab60,0x09570,     
0x04af5,0x04970,0x064b0,0x074a3,0x0ea50,0x06b58,0x055c0,0x0ab60,0x096d5,0x092e0,     
0x0c960,0x0d954,0x0d4a0,0x0da50,0x07552,0x056a0,0x0abb7,0x025d0,0x092d0,0x0cab5,     
0x0a950,0x0b4a0,0x0baa4,0x0ad50,0x055d9,0x04ba0,0x0a5b0,0x15176,0x052b0,0x0a930,     
0x07954,0x06aa0,0x0ad50,0x05b52,0x04b60,0x0a6e6,0x0a4e0,0x0d260,0x0ea65,0x0d530,     
0x05aa0,0x076a3,0x096d0,0x04bd7,0x04ad0,0x0a4d0,0x1d0b6,0x0d250,0x0d520,0x0dd45,     
0x0b5a0,0x056d0,0x055b2,0x049b0,0x0a577,0x0a4b0,0x0aa50,0x1b255,0x06d20,0x0ada0);     
   
//==== 傳回農曆 y年的總天數     
function lyeardays(y) {     
var i, sum = 348     
for(i=0x8000; i>0x8; i>>=1) sum += (lunarinfo[y-1900] & i)? 1: 0     
return(sum+leapdays(y))     
}     
//==== 傳回農曆 y年閏月的天數     
function leapdays(y) {     
if(leapmonth(y))  return((lunarinfo[y-1900] & 0x10000)? 30: 29)     
else return(0)     
}     
//==== 傳回農曆 y年閏哪個月 1-12 , 沒閏傳回 0     
function leapmonth(y) { return(lunarinfo[y-1900] & 0xf)}     
//====================================== 傳回農曆 y年m月的總天數     
function monthdays(y,m) { return( (lunarinfo[y-1900] & (0x10000>>m))? 30: 29 )}     
//==== 算出農曆, 傳入日期物件, 傳回農曆日期物件     
//     該物件屬性有 .year .month .day .isleap .yearcyl .daycyl .moncyl     
function lunar(objdate) {     
var i, leap=0, temp=0;     
var basedate = new Date(1900,0,31);     
var offset   = (objdate - basedate)/86400000;     
this.daycyl = offset + 40;     
this.moncyl = 14;     
for(i=1900; i<2050 && offset>0; i++) {     
temp = lyeardays(i);     
offset -= temp;     
this.moncyl += 12;     
}     
if(offset<0) {     
offset += temp;     
i--;     
this.moncyl -= 12;     
}     
this.year = i;     
this.yearcyl = i-1864;     
leap = leapmonth(i); //閏哪個月     
this.isleap = false    
for(i=1; i<13 && offset>0; i++) {     
//閏月     
if(leap>0 && i==(leap+1) && this.isleap==false)     
{ --i; this.isleap = true; temp = leapdays(this.year); }     
else    
{ temp = monthdays(this.year, i); }     
//解除閏月     
if(this.isleap==true && i==(leap+1)) this.isleap = false    
offset -= temp     
if(this.isleap == false) this.moncyl ++     
}     
if(offset==0 && leap>0 && i==leap+1)     
if(this.isleap)     
{ this.isleap = false; }     
else    
{ this.isleap = true; --i; --this.moncyl;}     
if(offset<0){ offset += temp; --i; --this.moncyl; }     
this.month = i     
this.day = offset + 1     
}     
function cday(m,d){     
var nstr1 = new Array('日','一','二','三','四','五','六','七','八','九','十');     
var nstr2 = new Array('初','十','廿','卅',' ');     
var s;     
if (m>10){s = '十'+nstr1[m-10]} else {s = nstr1[m]} s += '月'    
if (s=="十二月") s = "臘月";     
if (s=="一月") s = "正月";     
switch (d) {     
case 10:s += '初十'; break;     
case 20:s += '二十'; break;     
case 30:s += '三十'; break;     
default:s += nstr2[Math.floor(d/10)]; s += nstr1[d%10];     
}     
return(s);     
}     
function solarday2(){     
var sdobj = new Date(now.getFullYear(),now.getMonth(),now.getDate());     
var ldobj = new lunar(sdobj);     
var cl = '';      
//農曆bb'+(cld[d].isleap?'閏 ':' ')+cld[d].lmonth+' 月 '+cld[d].lday+' 日     
var tt = cday(ldobj.month,ldobj.day);     
document.write(now.getFullYear()+"年"+(now.getMonth()+1)+"月"+now.getDate()+"日 農曆"+tt+"");     
}     
solarday2();     
// -->
</script>

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.