Сравните два раза даты - PullRequest
2 голосов
/ 05 января 2010

label1 отображает дату / время последней транзакции, которые я получаю из базы данных посредством запроса. label2 - системная дата / время. У меня есть таймер, который выполняет командную кнопку, после чего я хочу проверить, меньше ли дата / время в label1 чем 5 минут Если так, то я хочу показать массаж.

Но я не знаю, почему мой код не выполняет эту функцию. Любая помощь будет высоко ценится.

Private Sub Command1_Click()
    Dim date1 As Date
    Dim date2 As Date

    date1 = Format(Now, "yyyy/mm/dd hh:mm:ss")
    date2 = Format(label1, "yyyy/mm/dd hh:mm:ss")
    If DateDiff("n", date1, date2) < 2 Then
       MsgBox ("Not Vending")
    End If
End Sub

Я также пробовал:

Private Sub Command1_Click()
    Dim date1 As Date
    Dim label1 As Date

    date1 = Format(Now, "yyyy/mm/dd hh:mm:ss")
    date2 = label1
    If DateDiff("m", Now, date1) > DateDiff("m", Now, label1) Then
       MsgBox ("Not Vending")
    End If
End Sub

А также:

Private Sub Command1_Click()  
    If DateDiff("n", Now, label1) > 5 Then
       MsgBox ("Not Vending")
    End If
End Sub

Ответы [ 2 ]

3 голосов
/ 05 января 2010

Если дата, извлеченная из БД, раньше, чем Now, DateDiff всегда будет возвращать отрицательное число, если вы передадите Now в качестве второго параметра. Похоже, вы проверяете время, поэтому я предполагаю, что даты в БД всегда будут раньше. Вам необходимо изменить порядок «Сейчас» и дату, с которой он сравнивается (DateDiff("n", date1, Now) вместо DateDiff("n", Now, date1).

Private Sub Command1_Click()
    Dim date1 As Date
    date1 = CDate(Label1.Caption)
    If DateDiff("n", date1, Now) < 5 Then
       MsgBox ("Not Vending")
    End If
End Sub
2 голосов
/ 10 июня 2013

Другим способом без использования функции DateDiff был бы прямой расчет с переменными Date - поскольку под капотом это фактически Doubles.

Private Sub Command1_Click()
    Dim date1 As Date
    date1 = CDate(Label1.Caption)
    '#12:05:00 AM# is representing a value of 5 Minutes in the Date-datatype
    If (date1 - Now) < #12:05:00 AM# Then
       MsgBox ("Not Vending")
    End If
End Sub

Если вы хотите проверить разницу во времени, вы также можете использовать

Private Sub Command1_Click()
    Dim date1 As Date
    date1 = CDate(Label1.Caption)
    '#12:05:00 AM# is representing a value of 5 Minutes in the Date-datatype
    If Abs(date1 - Now) < #12:05:00 AM# Then
       MsgBox ("Not Vending")
    End If
End Sub

Где Abs(date1 - Now) возвращает разницу во времени как Date -значение

Btw. date1 = Format(Now, "yyyy/mm/dd hh:mm:ss") не имеет смысла. Поскольку Now возвращает Date -значение, Format преобразует это Date -значение в String, а присвоение ему date1 преобразует это String в Date -значение ù, используя локальное значение. системные настройки для форматов даты - это означает, что программа будет вести себя по-разному в разных системах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...