2017-03-15 87 views
0

我將表中的所有數據複製到變量數組中。第1列有如下的時間戳。datediff函數來比較分鐘範圍

週四3月2一點14分28秒美國東部時間2017年

我要處理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週四3月2 1時14分28秒美國東部時間2017年則 if語句返回我下面的時間戳

週四3月2 01:12 :24 EST 2017年

週四3月2 1點12分44秒美國東部時間2017年

週四3月2 1時12分40秒美國東部時間2017年

週四3月2 0點47分12秒美國東部時間2017年

,而我想的時間戳,這將是> =1分鐘dSavedDate

的是什麼,我做錯了什麼?

+0

是吧' dSavedDate「的值是」Thu Mar 02 01:14:28 EST 2017「還是」vBaseArray(i,1)「的值?如果它不是'dSavedDate',**是'dSavedDate'的值? 「dSearchDate」的價值是什麼?你的代碼中是否有'On Error'語句可能會掩蓋錯誤? – YowE3K

+0

是的,dSavedDate的值是2017年3月2日星期四01:14:28。dSearchDate具有列1中所有時間戳的值,這些值都在特定標準內。主要是我給出的4個值。但顯然他們是不正確 – Jay

+0

如果'dSavedDate'是2017年3月2日星期四01:14:28然後'convertDate'沒有工作 - 如果它是我看到作爲您的其他問題之一的答案,它應該返回一個日期,而不是像你所顯示的值。 – YowE3K

回答

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 
+0

一個小問題 - OP要> = 1且<= 2。 – YowE3K

+0

@ YowE3K - 已經發現並添加了「Not」。 ;-) – Comintern

+0

這不會允許任何東西<-1 Or > 1? – YowE3K