2010-01-05 3 views
1

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

Откуда появляется этикетка? Почему вы конвертируете типы дат в строки только для того, чтобы идти и вызывать DateDiff для строк (что заставляет его преобразовывать строки обратно в Даты)? Предоставление нам нескольких версий Command1_Click не помогает, покажите нам только тот, который ближе всего к тому, что, по вашему мнению, должен работать. – AnthonyWJones

ответ

2

Если дата вытащил из БД раньше, чем сейчас, DateDiff всегда будет возвращать отрицательное число если вы передадите Now в качестве второго параметра. Похоже, вы проверяете течение времени, поэтому я предполагаю, что даты в БД всегда будут до 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 
+0

Код Ворона должен работать на вас. Для целей отладки я добавлял бы и Else в оператор, такой как Else MsgBox DateDiff («n», date1, Now) и «минута разницы» – jac

+0

Спасибо, что ответ получил его сортировку. – user243732

2

другим способом без использования DateDiff -функции будет прямой расчет с Date -variables. - так как под капотом это на самом деле 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 -Value

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

Смежные вопросы