主题:如何得出6个月后的最后一天
sleepingsleeping
[专家分:150] 发布于 2009-02-06 10:11:00
比如现在是02/06/2009,那么我想要得出的结果是:08/31/2009,在VFP中如何实现呢?
回复列表 (共10个回复)
沙发
BlueSmart [专家分:2340] 发布于 2009-02-06 11:41:00
我的苯办法:
ct=ctod("2009/02/06")
dd=CTOD(ALLTRIM(STR(YEAR(ct)))+'/'+ALLTRIM(STR(MONTH(ct)+7))+'/01')-1
一定会有高手有好办法
板凳
fyyylyl [专家分:8550] 发布于 2009-02-06 16:22:00
dDate=DATE()
?gomonth(dDate,7)-day(gomonth(dDate,6))
3 楼
cbl518 [专家分:57140] 发布于 2009-02-07 02:51:00
d1=ctod("2009/2/8")
? GOMONTH(d1-DAY(d1),7)
4 楼
cbl518 [专家分:57140] 发布于 2009-02-07 02:59:00
应该是这样
d1=GOMONTH(ctod("2009/3/31"),6 +1) && 6 是你要的向前或后的月的数量,用负数表示向前。
? d1 -DAY(d1)
5 楼
cbl518 [专家分:57140] 发布于 2009-02-07 08:58:00
求前一个月的最后一天:
d1=GOMONTH(ctod("2009/3/31"),-1 +1)
? d1 -DAY(d1)
6 楼
cbl518 [专家分:57140] 发布于 2009-02-07 09:00:00
求当月的最后一天:
d1=GOMONTH(DATE(),0 +1)
? d1 -DAY(d1)
7 楼
BlueSmart [专家分:2340] 发布于 2009-02-11 14:46:00
*我给你做个函数吧
*其中参数dDate日期型,nMonth数值型,几个月后
*
FUNCTION AfternMonthLDay(dDate,nMonth)
LOCAL lnYear,lnMonth,ldDate ,nYear
lnYear=year(dDate)
lnMonth=MONTH(dDate)+nMonth+1
nYear=INT(lnMonth/12)
lnMonth=lnMonth%12
lnYear=lnYear+nYear
ldDate=CTOD(ALLTRIM(STR(lnYear))+"/"+ALLTRIM(STR(lnmonth))+"/"+"01")-1
RETURN ldDate
ENDFUNC
可以放在数据库的存储过程中,做到"如影随身"
用法:
open database yourDBC
*然后在程序的任何地方可以调用此函数
?AfternMonthLDay(date(),6)
myDate=AfternMonthLDay(ctod('2009/02/11'),11)
等等
8 楼
my6542 [专家分:500] 发布于 2009-02-11 22:54:00
rq=date() &&确定一个日期,可以为任何傎
?=gomonth(rq,7)-day(gomonth(rq,7))
分析:
假如 rq= {^2008/03/12}
测 gomonth(rq,7)={^2008/10/12}
day(gomonth(rq,7))=12
测两者相减=)={^2008/09/30}
9 楼
zxplhzlt [专家分:420] 发布于 2009-02-13 10:54:00
GOMONTH(DATE()-DAY(DATE()-1),7)-1
10 楼
sleepingsleeping [专家分:150] 发布于 2009-02-16 17:04:00
谢谢各位老师,最近由于出了点状况,没来及时回贴.
我后来用了一个方法,也贴出来给大家看看
mm=month(date())
mm=month(date())+7
if mm>12
jg=date(year(date())+1,mm-12,1)-1
else
jg=date(year(date()),mm,1)-1
endif
?jg
我来回复