我正在将工作表中的所有数据复制到变体数组中。第1列的时间戳如下。
Thu Mar 02 01:14:28 EST
我想在1分钟的时间内处理所有行。我正在使用datediff函数来找出分钟的差异。但不知何故,它并没有按照预期运作。 这是代码。
For i = 1 To UBound(vBaseArray)
dSavedDate = convertDate(vBaseArray(i,1)) 'function to convert string to date
..... some code
For j = i To UBound(vBaseArray) 'function to convert string to date
If DateDiff("n", dSearchDate, dSavedDate) >= 1 And DateDiff("n", dSearchDate, dSavedDate) <= 2 Then
----some code
但结果不符合预期 如果dSavedDate是Thu Mar 02 01:14:28 2017那么 if语句在时间戳之后返回
Thu Mar 02 01:12:24 EST 2017
Thu Mar 02 01:12:44 EST 2017
Thu Mar 02 01:12:40 EST 2017
Thu Mar 02 00:47:12 2017
而我想要的时间戳是&gt; = dSavedDate的1分钟
我做错了什么?
答案 0 :(得分:2)
Date
变量在内部表示为Double
,时间部分为小数点右侧的小数日。您可以直接减去它们并使用增量来查看它们是否在一分钟之内:
Public Function WithinOneMinute(first As Date, second As Date) As Boolean
Const ONE_MINUTE As Double = 1 / 24 / 60
Dim difference As Date
difference = Abs(first - second)
WithinOneMinute = difference <= ONE_MINUTE
End Function
然后你可以在你的循环中调用它:
For i = 1 To UBound(vBaseArray)
dSavedDate = convertDate(vBaseArray(i, 1))
For j = i To UBound(vBaseArray)
If Not WithinOneMinute(dSearchDate, dSavedDate) Then