回 帖 发 新 帖 刷新版面

主题:请教日期型字段的计算

比如:目前是2009年10月15日,那么1年7个月零15天后是什么日子?

回复列表 (共7个回复)

沙发

SET DATE ANSI
SET CENTURY ON
?GOMONTH({^2009.10.15}+15,1*12+7)  &&其中1*12+7为1年7个月(或者直接写成19),+15为加15天

板凳

"1年7个月零15天",这本来是个不确切的时间概念,怎么求得出?



3 楼

2楼的答案不错,我还真不知道有这么一个函数。
但是如果是
?GOMONTH({^2009.7.16}+15,1*12+7) 返回2011.2.28,这样就有小漏洞。
可以用iif() 来判断。
比如,目前是2009年10月15日,那么1年7个月零15天后,可以写成:
?iif(15+15>28,GOMONTH({^2009.10.28},1*12+7)+15+15-28,GOMONTH({^2009.10.15}+15,1*12+7))
前面的15表示当前日期,后面的15表示 “1年7个月零15天后” 的这个15。前后的两个“15+15”可以根据需要来替换。
另外注意GOMONTH({^2009.10.28},1*12+7))+15+15-28中间的日期是28,并不是指定的时间,这样就解决了该函数只保留月份的问题。
实际公式为:目前是2009年10月M日,那么1年7个月零N天后为:
?iif( M+N>28,GOMONTH({^2009.10.28},1*12+7)+M+N-28,GOMONTH({^2009.10.M}+N ,1*12+7))

4 楼

3楼的意见很好,更正一下公式,应该是先加月数,再加15天。
?GOMONTH({^2009.10.15},1*12+7)+15

5 楼

夕阳无限近黄昏,光芒依旧映乾坤;遥望大地霞光处,笑洒余辉伴路人。

6 楼

如果当前的日期大于28日,比如2009.07.29,用?GOMONTH({^2009.07.29},1*12+7)+15出来的是2011.03.15,而用我的公式出来的是2011.03.16。
这中间牵扯到2月份28和29天的问题,就看楼主怎么取舍了。

7 楼

其实月末的这一天加若干个月以后,仍然是那个月的最后一天,这很正常。比如今年7月31日,加一个月就是8月31日,加两个月就是9月30日,加7个月就是2010年2月28日,加31个月就是2012年2月29日。

我来回复

您尚未登录,请登录后再回复。点此登录或注册