类似“今天是2008年1月3日 农历丁亥年十一月廿五 星期四”日期的JS

function  $(e) { return  document.getElementById(e);}
function  mygetd() {
    
var  sDate  =   new  Date();      // 农历
     var  myd  =   new  myLunar(sDate.getFullYear(),sDate.getMonth()  +   1 ,sDate.getDate());
    s
= ' 今天是 '   +  myd.y + ' ' + (myd.m + 1 ) + ' ' + myd.d + ' 日  ' + ' 农历 ' + myd.LY  +  myd.LM + myd.LD + '' + myd.LH1 + '   ' + myd.LH2 + '   ' + myd.H1 + '   ' + myd.H2  +   ' 星期 ' + nStr1[myd.week];
    
return  s;
}

// 数据
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 , 0x0a5b0 , 0x14573 , 0x052b0 , 0x0a9a8 , 0x0e950 , 0x06aa0 ,
0x0aea6 , 0x0ab50 , 0x04b60 , 0x0aae4 , 0x0a570 , 0x05260 , 0x0f263 , 0x0d950 , 0x05b57 , 0x056a0 ,
0x096d0 , 0x04dd5 , 0x04ad0 , 0x0a4d0 , 0x0d4d4 , 0x0d250 , 0x0d558 , 0x0b540 , 0x0b6a0 , 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 ,
0x14b63 );
var  Gan = new  Array( " " , " " , " " , " " , " " , " " , " " , " " , " " , " " );
var  Zhi = new  Array( " " , " " , " " , " " , " " , " " , " " , " " , " " , " " , " " , " " );
var  nStr1  =   new  Array( ' ' , ' ' , ' ' , ' ' , ' ' , ' ' , ' ' , ' ' , ' ' , ' ' , ' ' , ' 十一 ' , ' ' );
var  nStr2  =   new  Array( ' ' , ' ' , ' 廿 ' , ' ' , ' ' );
var  solarTerm  =   new  Array( " 小寒 " , " 大寒 " , " 立春 " , " 雨水 " , " 惊蛰 " , " 春分 " , " 清明 " , " 谷雨 " , " 立夏 " , " 小满 " , " 芒种 " , " 夏至 " , " 小暑 " , " 大暑 " , " 立秋 " , " 处暑 " , " 白露 " , " 秋分 " , " 寒露 " , " 霜降 " , " 立冬 " , " 小雪 " , " 大雪 " , " 冬至 " );
var  sTermInfo  =   new  Array( 0 , 21208 , 42467 , 63836 , 85337 , 107014 , 128867 , 150921 , 173149 , 195551 , 218072 , 240693 , 263343 , 285989 , 308563 , 331033 , 353350 , 375494 , 397447 , 419210 , 440795 , 462224 , 483532 , 504758 );
// 国历节日 *表示放假日
var  solarMonth = new  Array( 31 , 28 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31 );
var  sFtv  =   new  Array(
" 0101*元旦节 " ,
" 0202 世界湿地日 " ,
" 0210 国际气象节 " ,
" 0214 情人节 " ,
" 0301 国际海豹日 " ,
" 0303 全国爱耳日 " ,
" 0305 学雷锋纪念日 " ,
" 0308 妇女节 " ,
" 0312 植树节 孙中山逝世纪念日 " ,
" 0314 国际警察日 " ,
" 0315 消费者权益日 " ,
" 0317 中国国医节 国际航海日 " ,
" 0321 世界森林日 消除种族歧视国际日 世界儿歌日 " ,
" 0322 世界水日 " ,
" 0323 世界气象日 " ,
" 0324 世界防治结核病日 " ,
" 0325 全国中小学生安全教育日 " ,
" 0330 巴勒斯坦国土日 " ,
" 0401 愚人节 全国爱国卫生运动月(四月) 税收宣传月(四月) " ,
" 0407 世界卫生日 " ,
" 0422 世界地球日 " ,
" 0423 世界图书和版权日 " ,
" 0424 亚非新闻工作者日 " ,
" 0501*劳动节 " ,
" 0502*劳动节假日 " ,
" 0503*劳动节假日 " ,
" 0504 青年节 " ,
" 0505 碘缺乏病防治日 " ,
" 0508 世界红十字日 " ,
" 0512 国际护士节 " ,
" 0515 国际家庭日 " ,
" 0517 国际电信日 " ,
" 0518 国际博物馆日 " ,
" 0520 全国学生营养日 " ,
" 0523 国际牛奶日 " ,
" 0531 世界无烟日 "
" 0601 国际儿童节 " ,
" 0605 世界环境保护日 " ,
" 0606 全国爱眼日 " ,
" 0617 防治荒漠化和干旱日 " ,
" 0623 国际奥林匹克日 " ,
" 0625 全国土地日 " ,
" 0626 国际禁毒日 " ,
" 0701 香港回归纪念日 中共诞辰 世界建筑日 " ,
" 0702 国际体育记者日 " ,
" 0707 抗日战争纪念日 " ,
" 0711 世界人口日 " ,
" 0730 非洲妇女日 " ,
" 0801 建军节 " ,
" 0808 中国男子节(爸爸节) " ,
" 0815 抗日战争胜利纪念 " ,
" 0908 国际扫盲日 国际新闻工作者日 " ,
" 0909 毛泽东逝世纪念 " ,
" 0910 中国教师节 "
" 0914 世界清洁地球日 " ,
" 0916 国际臭氧层保护日 " ,
" 0918 九·一八事变纪念日 " ,
" 0920 国际爱牙日 " ,
" 0927 世界旅游日 " ,
" 0928 孔子诞辰 " ,
" 1001*国庆节 世界音乐日 国际老人节 " ,
" 1002*国庆节假日 国际和平与民主自由斗争日 " ,
" 1003*国庆节假日 " ,
" 1004 世界动物日 " ,
" 1006 老人节 " ,
" 1008 全国高血压日 世界视觉日 " ,
" 1009 世界邮政日 万国邮联日 " ,
" 1010 辛亥革命纪念日 世界精神卫生日 " ,
" 1013 世界保健日 国际教师节 " ,
" 1014 世界标准日 " ,
" 1015 国际盲人节(白手杖节) " ,
" 1016 世界粮食日 " ,
" 1017 世界消除贫困日 " ,
" 1022 世界传统医药日 " ,
" 1024 联合国日 " ,
" 1031 世界勤俭日 " ,
" 1107 十月社会主义革命纪念日 " ,
" 1108 中国记者日 " ,
" 1109 全国消防安全宣传教育日 " ,
" 1110 世界青年节 " ,
" 1111 国际科学与和平周(本日所属的一周) " ,
" 1112 孙中山诞辰纪念日 " ,
" 1114 世界糖尿病日 " ,
" 1117 国际大学生节 世界学生节 " ,
" 1120*彝族年 " ,
" 1121*彝族年 世界问候日 世界电视日 " ,
" 1122*彝族年 " ,
" 1129 国际声援巴勒斯坦人民国际日 " ,
" 1201 世界艾滋病日 " ,
" 1203 世界残疾人日 " ,
" 1205 国际经济和社会发展志愿人员日 " ,
" 1208 国际儿童电视日 " ,
" 1209 世界足球日 " ,
" 1210 世界人权日 " ,
" 1212 西安事变纪念日 " ,
" 1213 南京大屠杀(1937年)纪念日!紧记血泪史! " ,
" 1220 澳门回归纪念 " ,
" 1221 国际篮球日 " ,
" 1224 平安夜 " ,
" 1225 圣诞节 " ,
" 1226 毛泽东诞辰纪念 " )

// 农历节日 *表示放假日
var  lFtv  =   new  Array(
" 0101*春节 " ,
" 0102*初二 " ,
" 0103*初三 " ,
" 0115 元宵节 " ,
" 0505 端午节 " ,
" 0707 七夕情人节 " ,
" 0715 中元节 " ,
" 0815 中秋节 " ,
" 0909 重阳节 " ,
" 1208 腊八节 " ,
" 1223 小年 " ,
" 0100 除夕 " )

// 某月的第几个星期几
var  wFtv  =   new  Array(
" 0150 世界麻风日 " // 一月的最后一个星期日(月倒数第一个星期日)
" 0520 国际母亲节 " ,
" 0530 全国助残日 " ,
" 0630 父亲节 " ,
" 0730 被奴役国家周 " ,
" 0932 国际和平日 " ,
" 0940 国际聋人节 世界儿童日 " ,
" 0950 世界海事日 " ,
" 1011 国际住房日 " ,
" 1013 国际减轻自然灾害日(减灾日) " ,
" 1144 感恩节 " )


// 调用数据函数
function  k_month(month,day,isLeap,LL) {
    t
= ((month == 1 ) ? ' ' :nStr1[month]) + ' ' ;     if  (isLeap) t = ' ' + t;
    
if  (month == 12   &&  day == LL) t = ' 大年 ' ;
    
if  (month == 1   &&  day <= 7 ) t = ' 大年 ' ;    
    
return  t;
}
function  k_day(t) {
    
if  (t == 10 ) t1 = ' 初十 ' else   if  (t == 20 ) t1 = ' 二十 ' else   if  (t == 30 ) t1 = ' 三十 ' ;
    
else  t1 = nStr2[Math.floor(t / 10 )] + nStr1[t % 10 ];
    
return  t1;
}

function  k_lh2(y,m,d) {
    t1
= sTerm(y,m * 2  );
    
if  (t1 == d)  return  solarTerm[m * 2 ];
    t1
= sTerm(y,m * 2 + 1 );
    
if  (t1 == d)  return  solarTerm[m * 2 + 1 ];
    
return   '' ;
}
function  k_lh1(month,day,LL) {
    
var  s = '' ;
    
// 农历节日
     if  (month == 12   &&  day == LL) s = " 除夕 " ;
    
else   for (i  in  lFtv)
    
if (lFtv[i].match( /^ (d{ 2 })(.{ 2 })([s * ])(. + )$ / )) {
        
if (Number(RegExp.$ 1 ) == month  &&  Number(RegExp.$ 2 ) == day) {
            s
= RegExp.$ 4 ;
            
// if(RegExp.$3=='*') this[tmp2].color = 'red';
        } 
    }
    
return  s;
}
function  k_h1(m,d) {
    
var  s = '' ;    
    
// 公历节日
     for (i  in  sFtv)
    
if (sFtv[i].match( /^ (d{ 2 })(d{ 2 })([s * ])(. + )$ / ))
    
if (Number(RegExp.$ 1 ) == (m + 1 &&  Number(RegExp.$ 2 ) == d) {
        s
= RegExp.$ 4 ;
        
// if(RegExp.$3=='*') this[Number(RegExp.$2)-1].color = 'red';
    }
    
return  s;
}
function  k_h2(m,d,firstWeek,length) {
    
var  s = '' ;
    
// 月周节日
     for (i  in  wFtv)
    
if (wFtv[i].match( /^ (d{ 2 })(d)(d)([s * ])(. + )$ / ))
    
if (Number(RegExp.$ 1 ) == (m + 1 )) {
        t1
= Number(RegExp.$ 2 );
        t2
= Number(RegExp.$ 3 );
        
if (t1 < 5 )
        t3
= ((firstWeek > t2) ? 7 : 0 +   7 * (t1 - 1 +  t2  -  firstWeek + 1 ;
        
else  {
            t1 
-=   5 ;
            t3 
=  (firstWeek + length - 1 ) % 7 // 当月最后一天星期?
            t3 = length  -  t3  -   7 * t1  +  t2  -  (t2 > t3 ? 7 : 0 );
        }
        
if  (t3 == d) s = RegExp.$ 5 ;
        
// s+=t3;
    }
    
return  s;
}

// ==============================返回公历 y年某m+1月的天数
function  solarDays(y,m) {
    
if (m == 1 )
    
return (((y % 4   ==   0 &&  (y % 100   !=   0 ||  (y % 400   ==   0 )) ?   29 28 );
    
else   return (solarMonth[m]);
}
// ===== 某年的第n个节气为几日(从0小寒起算)
function  sTerm(y,n) {
    
var  offDate  =   new  Date( (  31556925974.7 * (y - 1900 +  sTermInfo[n] * 60000   )  +  Date.UTC( 1900 , 0 , 6 , 2 , 5 ) );
    
return (offDate.getUTCDate());
}
// ============================== 传入 offset 返回干支, 0=甲子
function  cyclical(num) {
    
return (Gan[num % 10 ] + Zhi[num % 12 ]);
}
// ====================================== 返回农历 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  );
}


// ====================================== 传入日期, 返回农历日期控件
/*
                                       
        该控件属性有 公历年月日星期.y .m .d .week; 
        公历当月天数.length; 
        公历当月一日星期.firstWeek

        农历年月日(汉字方式).LY .LM .LD 
        农历年月日(数字方式).year .month .day         
        农历是否闰月.isLeap
        农历农历当月天数.LL

        农历节日.LH1
        农历二十四节气.LH2
        公历节日.H1
        公历月周节日.H2

*/
function  myLunar(y,m,d) {

    
var  i, leap = 0 , temp = 0 ;    

// 公历年月日星期
    objDate = new  Date(y,m - 1 ,d);
    
this .y = objDate.getFullYear();
    
this .m = objDate.getMonth();
    
this .d = objDate.getDate();
    
this .week = objDate.getDay();
// 公历当月天数    
     this .length     =  solarDays( this .y, this .m);        
// 公历当月1日星期几
    sDObj  =   new  Date( this .y, this .m, 1 , 0 , 0 , 0 , 0 );    
    
this .firstWeek  =  sDObj.getDay();
    
// 农历年月日(数字方式)及是否闰月
     var  offset    =  (Date.UTC( this .y, this .m, this .d)  -  Date.UTC( 1900 , 0 , 31 )) / 86400000 ;
    
for (i = 1900 ; i < 2050   &&  offset > 0 ; i ++ ) { temp = lYearDays(i); offset -= temp; }
    
if (offset < 0 ) { offset += temp; i -- ; }
    
this .year  =  i;
    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 (offset == 0   &&  leap > 0   &&  i == leap + 1 )
    
if ( this .isLeap) {  this .isLeap  =   false ; }
    
else  {  this .isLeap  =   true -- i; }
    
if (offset < 0 ){ offset  +=  temp;  -- i; }

    
this .month  =  i;
    
this .day  =  offset  +   1 ;
// 农历当月最后一天
     this .LL  =   this .isLeap ?  leapDays( this .year): monthDays( this .year, this .month); 

// 节气与节日
     this .LH1 = k_lh1( this .month, this .day, this .LL);
    
this .LH2 = k_lh2( this .y, this .m, this .d);
    
this .H1 = k_h1( this .m, this .d);
    
this .H2 = k_h2( this .m, this .d, this .firstWeek, this .length);

// 农历年月日(汉字方式)
     this .LY = cyclical( this .year - 1900 + 36 ) + ' ' ;
    
this .LM = k_month( this .month, this .day, this .isLeap, this .LL);
    
this .LD = k_day( this .day);
}
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值