无法获得2个日期

时间:2016-08-18 04:45:45

标签: visual-foxpro foxpro

嗨,我是vfp编程新手

我有这样的剧本

date1 = this.value
date2 = thisform.pgfpagerefresh1.page2.txtpdbound8.value

我认为它已经采用日期时间格式
因为wait wind没有wait wind dtoc(date1)而不能countDays = date11 - date2 -> fail countDays = ROUND((date1-date2)/(3600*24),0) -> fail date1或date2

但不知怎的,我不能在上面的两个var日期之间得到天数

date1 = TRANSFORM(DTOS(this.value),"@R 9999-99-99")
date2 = TRANSFORM(DTOS(thisform.pgfpagerefresh1.page2.txtpdbound8.value),"@R 9999-99-99")

我已经尝试使用

转换为字符串
countDays = date(2016,10,18) - date(2016,10,12)

然后使用ctod使其恢复日期格式,但没有任何工作



我尝试像这样手动使用静态变量,成功获得数天

date1

如何转换我的var date2& 107/operator/operand type mismatch如上所述

@upddate

countDays = date1 - date2 Pattern pat1 = Pattern.compile("\\((.*)\\,"); Matcher mat1 = pat1.matcher(str);

2 个答案:

答案 0 :(得分:1)

这是有效的,无论值是日期,日期时间还是可转换为日期或日期时间的字符串值:

date1 = this.value
date2 = thisform.pgfpagerefresh1.page2.txtpdbound8.value

Local dDate1, dDate2, nDays
dDate1 = Cast(Cast(m.date1 as datetime) as date)
dDate2 = Cast(Cast(m.date2 as datetime) as date)

nDays = Abs(m.dDate2-m.dDate1)

? m.nDays

注意:如果是字符串,则可转换性取决于当前日期格式。即:如果设定日期为dmy,则“31/1/2016”将被转换,但不是“1/31/2016”。

答案 1 :(得分:1)

您可以使用TTOD()将DateTime转换为日期,然后简单的减法将适合您。

d1 = DATETIME(2016, 8, 18, 14, 0, 0)
d2 = DATETIME(2016, 8, 15, 10, 30, 0)

? TTOD(d1) - TTOD(d2)

3