中华农历论坛知识讨论区历法知识 → [求助]关于回历计算。希望许先生能来帮我看看


  共有18120人关注过本帖树形打印

主题:[求助]关于回历计算。希望许先生能来帮我看看

帅哥哟,离线,有人找我吗?
chwc
  1楼 个性首页 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:黑侠 帖子:603 积分:5315 威望:0 精华:4 注册:2008/4/21 19:06:00
[求助]关于回历计算。希望许先生能来帮我看看  发帖心情 Post By:2009/1/4 18:55:00

据《寿星万年历》中的回历计算介绍,我写了一个回历计算代码。希望许先生能来帮我看看会不会出错。要不是看到《寿星万年历》中的回历计算介绍,我以前对回历算法一点也不知。

function floor(x){/////数学函数
  return Math.floor(x);
}

function huili(y,m,d,h){
var n = (floor((round(JD(y,m,d,h,0,0,8)*1000)/1000)-0.167)-1948439);///总积日;从公元622年7月16日起连续按日计数。积日从0开始
var k = floor( (n+0.1)/10631 );/////某一周的周首相对于回历开始日偏移的周数
var A = n -k*10631;/////某日相对于周首的偏移日数
var y = floor( (A+0.5)/354.366 );////某日相对于年首的偏移日
var B = A - floor( y*354.366+0.5 );////某一日相对于该日所在月的月首编移的日数
var m = floor( (B+0.11)/29.51 );
var d = B - floor(29.5001*m+0.5);
var hy0=y+1+k*30;////回历年
var hy=hy0;if(hy0<=0)hy='前'+(-hy0+1);
var hm=m+1;////回历月
var hd=d+1;////回历日
var huli='回历'+hy+'年'+hm+'月'+hd+'日';
return huli;
}


支持(0中立(0反对(0单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
xjw01
  2楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:蝙蝠侠 帖子:866 积分:3804 威望:3 精华:20 注册:2008/3/20 22:14:00
  发帖心情 Post By:2009/1/5 9:32:00

 getHuiLi:function(d0,r){ //回历计算
  //以下算法使用Excel测试得到,测试时主要关心年临界与月临界
  var z,y,m,d;
  d = d0 + 503105;          z = int2((d+0.1)/10631);   //10631为一周期(30年)
  d -= z*10631;             y = int2((d+0.5)/354.366); //加0.5的作用是保证闰年正确
  d -= int2(y*354.366+0.5); m = int2((d+0.11)/29.51);
  d -= int2(m*29.51+0.5);
  r.Hyear = z*30+y+1;
  r.Hmonth= m+1;
  r.Hday  = d+1;
 }
你的算法与以上《寿星万年历》的算法基本相同,不同之处在于总积数的计算。

总积日的计算与小时数无关,所以入口参数不需要“小时”参数

var n = (floor((round(JD(y,m,d,h,0,0,8)*1000)/1000)-0.167)-1948439);

如果JD()返回标准的儒略日数,这一行最好改写为

var n = floor(JD(y,m,d,0,0,0,0)+0.51 - (2451545-503105) );

var n = floor(JD(y,m,d,0,0,0,0) - 1948439.49 );

var n = floor(JD(y,m,d,0,0,0,0) - 1948439.5 ); //如果JD()可以正常处理2的整指数值的线性组合值而不产生截断(一般是可以正确处理的),现代计算机是以二进制表达数值的,可以精确表达2的整指数值的线性组合值。十进制值0.5可以用二进制精确表达为0.1而不产生截断误差

 


支持(0中立(0反对(0单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
chwc
  3楼 个性首页 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:黑侠 帖子:603 积分:5315 威望:0 精华:4 注册:2008/4/21 19:06:00
  发帖心情 Post By:2009/1/5 18:48:00

多谢

支持(0中立(0反对(0单帖管理 | 引用 | 回复 回到顶部
客人(59.39.*.*)
  4楼


  发帖心情 Post By:2010/3/31 12:24:00

我用上面的办法为什么算不对,2000.1.1儒略日d0是2451545.0,但怎么从儒略日算回历就是算不对呢,算出来的回历老是8338.11.1,能帮帮我吗?急啊

支持(0中立(0反对(0单帖管理 | 引用 | 回复 回到顶部

返回版面帖子列表

[求助]关于回历计算。希望许先生能来帮我看看








签名