以文本方式查看主题

-  中华农历论坛  (http://bbs.nongli.net/index.asp)
--  历法知识  (http://bbs.nongli.net/list.asp?boardid=2)
----  雪缘电子万年历高级完整版 V3.00(8500年)  (http://bbs.nongli.net/dispbbs.asp?boardid=2&id=16555)

--  作者:NetGhost
--  发布时间:2009/1/5 13:02:00
--  雪缘电子万年历高级完整版 V3.00(8500年)

雪缘电子万年历高级完整版 V3.00 更新更多黄历信息、命理等信息!由于软件常有更新使用期限至2009-2-28 请随时升级

下载地址:雪缘电子万年历高级完整版

访问地址:雪缘电子万年历高级完整版

 


--  作者:lxm0521
--  发布时间:2009/1/5 18:54:00
--  
你的软件速度太慢了,你还不公布源码,没有开源精神,向许老师学习吧,在大家的关心讨论中改进学习和进步
--  作者:浪-淘-沙
--  发布时间:2009/1/5 23:19:00
--  

速度是慢.估计是所谓的查表法.即把8500年里的数据都计算好了,放在一个数据库里,供查找日历时用.这样就相对慢一些了.

另外就是软件的精度问题.不知道楼主的软件与实际的数据相差多少?

较精确的数据参考紫金山天文台发布的二十四节气时刻,朔望时刻.


--  作者:chwc
--  发布时间:2009/1/6 10:57:00
--  
接了你的电话后,我就下载来看看,发现你没把大小月有错的地方改过来。例如:2032年11(冬)月只有29天,是小,但是你的显示大。你在电话说你的大小月算法是看每月最后一天如是30就大,29就小。可是我昨晚EXE版看后就去把你的源码下载来看,不是啊。你的大小月算法是用我的《电脑医生万年历》测试版的代码。(注:《知来者》内核没有算大小月的代码,我加上的),你把它理解错了。我的本意是:“每月初一加29,如果是30就大,如果是1就是小。”但我发现这样这种土办法算出来的结果出错多,在调用时做了修正。我当时的修正也是会有出错的。而你现在还是用我早期的方法;所以有错。我在2008年10月就改了。计算代码如下(2008年10月计算法没改):
  function lundsMon(y,m,d){
  var lunDt=lunDate(y,m,d);///调用農暦日函數
  var lunD=floor(lunDt-floor(lunDt/100)*100);  //農暦日數
  var rja=lunD-1;////算离这月的初一有多少天
  var a96=floor((lunDate(y,m,d-rja+29))-floor((lunDate(y,m,d-rja+29))/100)*100);///算初一加29后日數是多少。
  var dszm=\'\';  /////農曆月大或小。
  if(a96==30){dszm=\'大\'
   }else{dszm=\'小\'
  } 
  return dszm;
  }
 调用修正代码如下(调用在2008年10月这里有改后):////////計算農曆月大小。
  var dasao=\'\'; var lunMa28=lunMon(y1+1,1,1); var lunMa29=lunMon(y1,m1+1,1);
  if(m1==12&&d1>=2&&d1>lunD1){if(lunMa28==lunM1){dasao=lundsMon(y1+1,1,1)}else{dasao=lundsMon(y1,m1,d1)}}else{if(d1>=2&&d1>lunD1){if(lunMa29==lunM1){dasao=lundsMon(y1,m1+1,1)}else{dasao=lundsMon(y1,m1,d1)}}else{dasao=lundsMon(y1,m1,d1)}}
这样错就修正过来了,但是运算多了如是早期的电脑就慢了。我在《电脑医生万年历》1.87版时就把它扔了;现在我的代码如下:
  function lundsMon(y,m,d){
  var a96=lunDate(y,m,d,1);////月共有多少天。
  var dszm=\'\';  /////農曆月大或小。
  if(a96==30){dszm=\'大\'
   }else{dszm=\'小\'
  } 
  return dszm;
  }
调用:dasao=lundsMon(y1,m1,d1);////////計算農曆月大小。
不但简单了,而且不会出错。
[此贴子已经被作者于2009-1-6 12:25:00编辑过]


--  作者:chwc
--  发布时间:2009/1/6 11:09:00
--  
另外月的干支和72候也有错。《知来者》原作者的代码(注:72候也是我加上的,早期的有错)和我的《电脑医生万年历》测试版的代码算出来的出错多。我在:[分享]献给那些和我采用同样核心代码的人们做参考。中已有公开月的干支算法代码,这里不重发。你有兴趣可去看看。
--  作者:NetGhost
--  发布时间:2009/1/6 13:25:00
--  
增加了命理推测!优化了部分代码,待命理部分代码完成即可后公开源码,由于最近时间比较繁忙有些错误还未即时更新!望大家谅解!本历主要用于择吉和批命。由于常有更新待源码未公开前都有使用期限。
--  作者:lxm0521
--  发布时间:2009/1/6 14:07:00
--  
以下是引用NetGhost在2009-1-6 13:25:00的发言:
增加了命理推测!优化了部分代码,待命理部分代码完成即可后公开源码,由于最近时间比较繁忙有些错误还未即时更新!望大家谅解!本历主要用于择吉和批命。由于常有更新待源码未公开前都有使用期限。

好的,大家期待,预祝你的代码越来越完善


--  作者:chwc
--  发布时间:2009/1/6 17:40:00
--  

很高兴NetGhost你用上我改后的代码,你打话叫我上传源码给你核对,因上传麻烦,再加上有的还在测试中,现在我只对你有用部份并已测试过的来给你。大小月出错可用两个方法修正。方法一:把“var dasao=;
if(m1==12&&d1>2&&d1>lunD1){dasao=lundsMon(y1+1,1,1)}else{if(d1>2&&d1>lunD1){dasao=lundsMon(y1,m1+1,1)}else{dasao=lundsMon(y1,m1,d1)}}  ”

换为“  var dasao=; var lunMa28=lunMon(y1+1,1,1); var lunMa29=lunMon(y1,m1+1,1);
  if(m1==12&&d1>=2&&d1>lunD1){if(lunMa28==lunM1){dasao=lundsMon(y1+1,1,1)}else{dasao=lundsMon(y1,m1,d1)}}else{if(d1>=2&&d1>lunD1){if(lunMa29==lunM1){dasao=lundsMon(y1,m1+1,1)}else{dasao=lundsMon(y1,m1,d1)}}else{dasao=lundsMon(y1,m1,d1)}}”

二:比较准确和实用的;必须改动function lunDate(y,m,d,a){

},主要是改动{ }里边的部份代码;我在《公开《电脑医生万年历》源码,献给采用同样核心代码的人们做参考》已公开过了,在这不重发了。你要就去看看。你要的72候新算法那也有。http://bbs.nongli.com/dispbbs.asp?boardid=2&id=16589&star=1#16589