2010-01-30 4 views
2

Ce n'est pas une question de devoirs :).Comment calculer qui a passé six mois à partir d'une date donnée en VB6?

Je voudrais coder une fonction qui renvoie Vrai si 6 mois se sont écoulés depuis une date donnée (donc, je suis le premier jour du septième mois).

Fonction PassedSixMonthsSince (Dim dGivenDate comme date, Dim dCurrentDate comme date) comme Boolean

Ce sont des tests que cette fonction doit passer:

Debug.Assert PassedSixMonthsSince ("2000 -01-01" , "2000-07-01") = True

Debug.Assert PassedSixMonthsSince ("2000-01-31", "2000-07-31") = True

Debug.Assert PassedSixMonthsSince ("2000-08-31", "2001-02-28") = Faux

Debug.Assert PassedSixMonthsSince ("2007-08-31", "2008-02-29") = False

Debug.Assert PassedSixMonthsSince ("2000-05-31", "2000-11-30") = Faux

j'ai essayé d'utiliser DateAdd ("m", 6, dGivenDate) mais ce n'est pas si facile.

grâce Michele

Répondre

0

J'ai résolu avec ce code:

Function PassedSixMonthsSince(ByVal dGivenDate as Date,ByVal dCurrentDate as Date) 
    dGivenDateWithSixMonthsAdded=DateAdd("m", 6, dGivenDate) 
    if Day(dGivenDate)<>Day(dGivenDateWithSixMonthsAdded) then 
      dGivenDateWithSixMonthsAdded=DateAdd("d", 1,dGivenDateWithSixMonthsAdded) 
    end if 
    PassedSixMonthsSince = (dCurrentDate >= dGivenDateWithSixMonthsAdded) 
End Function 
1

Je n'ai pas VB6 installé plus, mais j'ai essayé ce code VBScript:

<script language="vbscript"> 

Function PassedSixMonthsSince(dGivenDate, dCurrentDate) 

    '' // should be just greater, not greater or equals 
    PassedSixMonthsSince = _ 
     CDate(dCurrentDate) >= DateAdd("m", 6, CDate(dGivenDate)) 
    MsgBox _ 
     "Is " & CDate(dCurrentDate) & _ 
     " greater or equal than " & DateAdd("m", 6, CDate(dGivenDate)) & _ 
     " ? = " & PassedSixMonthsSince 

End Function 

PassedSixMonthsSince "2000-01-01", "2000-07-01" ''// exactly 6 months 
PassedSixMonthsSince "2000-01-31", "2000-07-31" ''// exactly 6 months 
PassedSixMonthsSince "2000-08-31", "2001-02-28" ''// One day less 6 months 
PassedSixMonthsSince "2000-05-31", "2001-11-30" ''// One day less 6 months 

</script> 

J'ai remplacé votre séparateur de date à utiliser des tirets et de corriger cette date erronée "2001-02-29". Mais vos affirmations sont fausses.

+0

« 2001-02-29 est une date correcte tous les 4 ans au moins –

+0

Non, mais' 2000-02-29' est une date valide.. –

+0

J'ai corrigé mon affirmation merci. – systempuntoout

0

il ressemble à DateDiff() est disponible en VB6 ...

IF DateDiff("m", FirstDate, SecondDate) >= 6 THEN 
return ture 
ELSE 
return false 
END IF 

quelque chose le long de ces lignes peut-être

+2

Cependant, la différence en mois ne tient pas compte des jours, il y a donc un écart d'un mois entre le 2010-01-31 et le 2010-02-01. – Guffa

1

DataAdd est la bonne façon de procéder. Vous pouvez ajouter six mois à la date indiquée:

PassedSixMonthsSince = DateAdd("m", 6, dGivenDate) >= dCurrentDate 

ou vous pouvez soustraire six mois à compter de la date actuelle:

PassedSixMonthsSince = dGivenDate >= DateAdd("m", -6, dCurrentDate) 

Si vous ne recevez pas le bon résultat, il est parce que le les dates que vous avez écrites ne peuvent pas être analysées correctement. Le format que vous avez utilisé est (AFAIK) le vôtre, il n'est pas utilisé ailleurs. Le format normalisé (ISO 8601) est "2000-02-29", et il existe d'autres formats courants comme "2/29/2000" et "29/2/2000". Si vous souhaitez utiliser des littéraux de date au lieu d'analyser des chaînes, ils sont délimités par des signes de hachage: #2000-02-29#.

+0

DateAdd ne fonctionne pas. Essayez ceci: DateAdd ("m", 6, "2000-05-31") .. vous obtiendrez "2000-11-30" et il ne passe pas le test. Le 2000-11-30, 5 mois et 30 jours sont passés mais pas 6 mois comme demandé. Date d'utilisationAjouter ajouter 6 mois doit retourner Faux dans les trois derniers tests. – systempuntoout

+0

@systempuntoout: Je vois, vous avez ajouté un autre test ... Ajouter -6 monhts de 2000-11-30 et vous obtenez 2000-05-30, ce qui est inférieur à 2000-05-31. Donc, vous devrez tester à la fois la variation d'addition et de soustraction pour attraper les cas de coin. – Guffa

Questions connexes