用JScript实现公历到农历的日期转换[3]

[入库:2005年8月18日] [更新:2007年3月25日]

本文简介:选择自 bhw98 的 blog

.substr((ilunarday - 1) / 10, 1) + sztext2.substr((ilunarday - 1) % 10, 1); } else if (ilunarday != 20) { strday = sztext1.substr(ilunarday / 10, 1) + "十"; } else { strday = "二十"; } return strday; } // 将公历日期转换为农历日期,返回农历表示的字符串 function getlunardatestring(solardate) { var tmp; var ilunaryear; var ilunarmonth; var ilunarday; var leap = false; var minmilli = 1000 * 60; var hrmilli = minmilli * 60; var dymilli = hrmilli * 24; // 从2001年1月1日算起,给定的公历日期已经过去的天数 // 11323是1970年1月1日到2001年1月1日之间的天数,因为date是从1970年1月1日作为起点的 var ispandays = math.round(solardate.gettime() / dymilli) - 11323; // 公历2001年1月24日为农历2001年正月初一,差23天 if (ispandays < 23) { iyear = 2000; ilunarmonth = 12; ilunarday = ispandays + 7; } else { // 从农历2001年正月初一算起 ispandays = ispandays - 23; ilunaryear = 2001; ilunarmonth = 1; ilunarday = 1; // 计算农历年 tmp = lunaryeardays(ilunaryear); while (ispandays >= tmp) { ispandays -= tmp; ilunaryear++; tmp = lunaryeardays(ilunaryear); } // 计算农历月 tmp = lunarmonthdays(ilunaryear, ilunarmonth) & 0xffff; //取低字 while (ispandays >= tmp) { ispandays -= tmp; if (ilunarmonth == getleapmonth(ilunaryear)) // 该年该月闰月 { tmp = lunarmonthdays(ilunaryear, ilunarmonth) >> 16; //取高字 if (ispandays < tmp) { leap = (tmp > 0) ? true : false; // 闰月的后个月? break; } ispandays = ispandays - tmp; } ilunarmonth++; tmp = lunarmonthdays(ilunaryear,ilunarmonth) & 0xffff; //取低字 } // 计算农历日 ilunarday += ispandays; } return formatlunaryear(ilunaryear) + (leap ? "闰" : "") + formatlunarmonth(ilunarmonth) + formatlunarday(ilunarday); }

调用方法举例如下:

var today= new date();   // 今天是2004-3-5
var str = getlunardatestring(today);

结果是 “甲申年二月十五”。

再举两个例子:

var date1 = new date(2008, 9, 1);     // 2008-10-1
var date2 = new date(2050, 4, 18);    // 2050-5-18
var str1 = getlunardatestring(date1);
var str2 = getlunardatestring(date2);

结果分别是 “戊子年九月初三” 和 “庚午年闰三月廿八”。

注意在date中,月的范围是0-11。

本文关键:JScript, 农历, 日期转换
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top