Office中国论坛/Access中国论坛

标题: [已解决]datediff计算足月的时候居然四舍五入?大侠们速度帮帮本菜鸟!help! [打印本页]

作者: sygudeng    时间: 2009-1-31 09:27
标题: [已解决]datediff计算足月的时候居然四舍五入?大侠们速度帮帮本菜鸟!help!
本帖最后由 sygudeng 于 2009-2-17 22:10 编辑

2007-7-22,2007-9-4两者间隔44天,应该计算为1足月
但是使用datediff("m",开始日期,结束日期)的时候则计算为2

我找不出问题在哪里,请各位指教一下
作者: rcylbx    时间: 2009-1-31 09:34
本帖最后由 rcylbx 于 2009-1-31 09:41 编辑

datediff计算出应该不是足月,而是间隔月数,计算上月最后1天和下月第一天,虽然之间只差1天,但DateDiff结果是差1月,如果想得到你说的足月,应进一步改造一下函数,如果不考月度之间的天数差异,比如定30天为足月,利用取整函数应该能做到,如果,考虑每个月的天数差异比如2月有28天等情况,函数将更复杂。
作者: ACMAIN_CHM    时间: 2009-1-31 09:44
没办法,内建的函数又很多地方是微软按照惯例来做了,很难面面俱到。你可以用下现的函数组合实现一下。

datediff("m",d1,iif(day(d2)<day(d1),dateadd("m",-1,d2+day(d1)-day(d2)),d2-(day(d2)-day(d1))))

d1=#2007-7-22#
d2=#2007-9-4#
?datediff("m",d1,iif(day(d2)<day(d1),dateadd("m",-1,d2+day(d1)-day(d2)),d2-(day(d2)-day(d1))))
1
d1=#7/4/2007#
d2=#9/14/2007#
?datediff("m",d1,iif(day(d2)<day(d1),dateadd("m",-1,d2+day(d1)-day(d2)),d2-(day(d2)-day(d1))))
2







*****************
*  一切皆有可能 *
*****************


QQ群 48866293 / 12035577 / 7440532 / 13666209
http://forum.csdn.net/SList/Access .
http://www.accessbbs.cn/bbs/index.php .
http://www.accessoft.com/bbs/index.asp .
http://www.access-programmers.co.uk/forums .
http://www.office-cn.net .

http://www.office-cn.net/home/space.php?uid=141646 .
作者: rcylbx    时间: 2009-1-31 09:55
学习了
作者: sygudeng    时间: 2009-1-31 13:59
哦啊!太感动了!多谢指教!
作者: sygudeng    时间: 2009-2-10 09:19
老大,2008-7-29 到 2009-02-10 计算结果不对啊~应该是6 计算为7
作者: ACMAIN_CHM    时间: 2009-2-10 12:59
d1=#2008-7-29#
d2=#2009-02-10#
?datediff("m",d1-day(d1)+1 , d2-day(d2)+1) - iif(day(d2)<day(d1),1,0)
6
?datediff("m",d1-day(d1)+1 , d2-day(d2)+1) -- (day(d2)<day(d1))
6
[attach]34971[/attach]


******************
*  一切皆有可能  *
******************

.

.
QQ群 48866293 / 12035577 / 7440532 / 13666209
http://forum.csdn.net/SList/Access .
http://www.accessbbs.cn/bbs/index.php .
http://www.accessoft.com/bbs/index.asp .
http://www.access-programmers.co.uk/forums .
http://www.office-cn.net .
.
http://www.office-cn.net/home/space.php?uid=141646 .
作者: sygudeng    时间: 2009-2-10 13:16
多谢大大赐教这次仔细参详大大实例得出一个比较傻瓜的办法
d1=#2008-7-29#
d2=#2009-2-10#
?DateDiff("m", d1, IIf(Day(d2) < Day(d1), DateAdd("m", -1, d2), d2))
6




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3