主题:请教日期型字段的计算
smart921
[专家分:0] 发布于 2009-10-29 13:23:00
比如:目前是2009年10月15日,那么1年7个月零15天后是什么日子?
回复列表 (共7个回复)
沙发
sywzs [专家分:5650] 发布于 2009-10-30 10:57:00
SET DATE ANSI
SET CENTURY ON
?GOMONTH({^2009.10.15}+15,1*12+7) &&其中1*12+7为1年7个月(或者直接写成19),+15为加15天
板凳
Ilikefox [专家分:5770] 发布于 2009-10-30 17:36:00
"1年7个月零15天",这本来是个不确切的时间概念,怎么求得出?
3 楼
Gleam [专家分:3100] 发布于 2009-10-30 18:00:00
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 楼
sywzs [专家分:5650] 发布于 2009-10-31 06:49:00
3楼的意见很好,更正一下公式,应该是先加月数,再加15天。
?GOMONTH({^2009.10.15},1*12+7)+15
5 楼
北京惬意 [专家分:1330] 发布于 2009-10-31 09:33:00
夕阳无限近黄昏,光芒依旧映乾坤;遥望大地霞光处,笑洒余辉伴路人。
6 楼
Gleam [专家分:3100] 发布于 2009-10-31 16:41:00
如果当前的日期大于28日,比如2009.07.29,用?GOMONTH({^2009.07.29},1*12+7)+15出来的是2011.03.15,而用我的公式出来的是2011.03.16。
这中间牵扯到2月份28和29天的问题,就看楼主怎么取舍了。
7 楼
sywzs [专家分:5650] 发布于 2009-11-01 07:42:00
其实月末的这一天加若干个月以后,仍然是那个月的最后一天,这很正常。比如今年7月31日,加一个月就是8月31日,加两个月就是9月30日,加7个月就是2010年2月28日,加31个月就是2012年2月29日。
我来回复