guo兄由Edate来联系的想法没有问题,应该说两者大体上的算法是一致的。但datedif是由天数推算整月数,而edate是由整月数推算天数,正向和逆向的行为不能简单的进行比较,有时需要反过来看。可以看看我下面的解释是否合理: Edate("2006-1-31",1),从1月往后推1个月,按照我datedif的说法,应该是计算1月份的天数31天,然后进行比较,1-28到2-28的日期差为31,29日、30日、31日到2-28都小于31,凡小于等于31天的都算作1个整月。所以28~31日算出来的结果都是2-28。如果换成1月27日,日期差为32,大于31了,所以加1个月只能到2月27日了。这就是反过来的看法。 Edate("2006-5-31",-3),从5月往前推3个月,应该是计算4月份、3月份、2月份的总天数,共89天。凡大于等于89天的都可算作3个整月(因为是倒推,所以取大于等于;上面1月例子是正推,所以取小于等于,相当于一个行减法,一个行加法)。所以5月28日~5月30日到2月28日的日期差都大于等于89天,三个月减出来的结果都一样。如果换成5月27日,日期差为88,小于89天,减3个月了就会过头了,出来2月27日了。(我没有加载edate函数,根据我的推算,应该是这个结果吧?) 上面这个就是将datedif和edate统一起来的解释算法,当然这也只是我的个人看法。而且可能其他人不是很好理解我的话,呵呵,我老婆都常常听不明白我的话[em06]。 有兴趣的朋友可以参照3楼附件的样式,套用我上面的解释同样做一个edate函数的公式解释算法出来。
[此贴子已经被作者于2006-5-13 20:27:38编辑过] |