1

我有 2 个日期,小时数如下:'2013-01-01 12:25:32' (yyyy-mm-dd hh:mm:ss) 我应该以分钟为单位找到 DateA 和 DateB 之间的差异。我怎样才能做到这一点?

谢谢

4

2 回答 2

4

只要日期或日期/时间格式相同,VFP 就可以轻松处理日期和日期时间数学。

如果数据类型是字符串格式与实际日期或日期/时间格式,Oleg 关于转换数据类型是正确的,但您显然可以使用 VFP。尝试其中一些以了解正在发生的事情。

如果两个字段都只是日期,则加法/减法基于 DAYS

ldStartDate = date( 2013, 12, 5 )
ldOtherDate = date( 2013, 11, 24 )

nDaysDiff = ldStartDate - ldOtherDate

结果是11天。

计算给定月份的第一天?

ldFirstOfMonth = ldStartDate - DAY( ldStartDate ) +1

因为示例 day() 将返回 5(12 月 5 日),所以 12 月 5 日 - 5 天 = 11 月的最后一天 +1 带回 12 月 1 日。

现在,使用日期/时间字段 - 日期/时间基于 SECONDS 差异

ldStartTime = DATETIME( 2013, 12, 5, 8, 56, 00 )
ldOtherTime = DATETIME( 2013, 11, 24, 12, 00, 00 )
nSecDiff = ldStartTime - ldOtherTime

? nSecDiff
result = 939360 seconds

? nSecDiff / 60
result = 15656 minutes

? nSecDiff / 60 / 60
result = 260.93 hours

? nSecDiff / 60 / 60 / 24
result is 10.87 days

哦...忘记了...如果处理日期/日期时间的数值,它们分别对应于日期(如在示例中计算一个月的第一天)和日期/时间字段的秒结果。

所以

? ldStartDate + 10 
would result in Dec 5 + 10 days or Dec 15th

? ldStartDate - 3
would result in Dec 5 - 3 days or Dec 2nd

** from when ldStartTime initially set to Dec 5 at 8:56:00am
? ldStartTime + 20
would be Dec 5, 8:56:20am

? ldStartTime + (20*60)
would be Dec 5, 8:56:00am + 20 MINUTES = 9:16am

? ldStartTime + (1*60*60)
would be Dec 5, 8:56:00am + 1 HOUR = 9:56am

? ldStartTime + (1*60*60*24)
would be Dec 5, 8:56:00am + 1 DAT = Dec 6, 8:56am
于 2013-12-05T14:00:43.217 回答
0

您可以使用 CTOT() 函数,但由于您的字符串包含空格符号而不是 'T' 符号,因此应首先将其替换:

?CTOT(CHRTRAN('2013-01-01 12:25:35', ' ', 'T'))-CTOT(CHRTRAN('2013-01-01 12:25:32', ' ', 'T'))

结果将是 3。

于 2013-12-05T12:41:05.803 回答