2010-01-05 5 views
1

label1 affiche la dernière date/heure de transaction que je reçois d'une base de données via une requête. label2 est la date et l'heure du système. J'ai une minuterie qui exécute un bouton de commande après lequel je veux vérifier si la date/heure dans label1 est inférieure à 5 minutes. Si oui, je veux montrer un massage.Comparer deux fois la date

Mais je ne sais pas pourquoi mon code n'effectue pas cette fonction. Toute aide sera grandement appréciée.

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 

J'ai aussi essayé:

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 

En plus:

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

D'où provient le label1? Pourquoi convertissez-vous des types de dates en chaînes uniquement pour aller appeler DateDiff sur les chaînes (ce qui force le lecteur à convertir les chaînes en dates) ?? En nous donnant plusieurs versions de Command1_Click n'est pas utile, montrez-en un qui est le plus proche de ce que vous pensez devrait fonctionner. – AnthonyWJones

Répondre

2

Si la date tirée de la DB est plus tôt que maintenant, DateDiff vaudra toujours un nombre négatif si vous passez maintenant en tant que deuxième paramètre. On dirait que vous vérifiez le passage du temps, donc je suppose que les dates dans DB seront toujours avant maintenant. Vous devez changer l'ordre de maintenant et la date à laquelle elle est comparée (DateDiff("n", date1, Now) au lieu de 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

Le code de Raven devrait fonctionner pour vous. À des fins de débogage je voudrais ajouter et Else à la déclaration comme Else MsgBox DateDiff ("n", date1, maintenant) & "différence de minutes" – jac

+0

Merci pour la réponse obtenue triée. – user243732

2

Une autre façon sans utiliser le DateDiff -fonction serait calcul direct avec les Date -variables -. Depuis sous le capot ce sont en fait 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 

Si vous voulez vérifier la différence de temps, vous pouvez également utiliser

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) retourne la différence de temps Date -value

btw. date1 = Format(Now, "yyyy/mm/dd hh:mm:ss") ne fait pas de sens. Depuis Now retourne un Date -value, Format convertit que Date -value en ce String et l'affectation à date1 convertit que String retour à un Date -value en utilisant les paramètres du système local pour les formats de date - ce qui signifie que le programme se comportera différents sur différents systèmes.