CALCULE ENTRE 2 DATES

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 23 avril 2005 à 01:11
cs_castagne Messages postés 20 Date d'inscription jeudi 27 mars 2003 Statut Membre Dernière intervention 9 janvier 2008 - 25 juin 2007 à 15:07
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/30930-calcule-entre-2-dates

cs_castagne Messages postés 20 Date d'inscription jeudi 27 mars 2003 Statut Membre Dernière intervention 9 janvier 2008
25 juin 2007 à 15:07
la meme mais en .net ??
j'ai pas trouvé
cs_Stephane Messages postés 550 Date d'inscription vendredi 5 janvier 2001 Statut Membre Dernière intervention 23 septembre 2006
28 avril 2005 à 12:07
et bin tappez dans VB datediff( et vous verrez la syntaxe, la fonction est deja incluse dans VB

a+
Seth77 Messages postés 572 Date d'inscription mardi 30 avril 2002 Statut Membre Dernière intervention 4 mai 2020 1
28 avril 2005 à 00:00
?????
cs_Stephane Messages postés 550 Date d'inscription vendredi 5 janvier 2001 Statut Membre Dernière intervention 23 septembre 2006
27 avril 2005 à 23:52
ohhh

et le datediff alors !!!!
a quoi ca sert sinon qu'il se décarcasse ! :D

dsl davoir fusillé ton code :D

a+
Seth77 Messages postés 572 Date d'inscription mardi 30 avril 2002 Statut Membre Dernière intervention 4 mai 2020 1
23 avril 2005 à 15:50
oui j ai remarque que certaine date posaient probleme !
j y travaille !

:-)
cs_kmw Messages postés 9 Date d'inscription dimanche 12 décembre 2004 Statut Membre Dernière intervention 19 juin 2007
23 avril 2005 à 14:41
PS : Merci Jack pour ton code...j'ai encore appris qqch sur VBFRANCE.
cs_kmw Messages postés 9 Date d'inscription dimanche 12 décembre 2004 Statut Membre Dernière intervention 19 juin 2007
23 avril 2005 à 14:14
Ton prog ne fonctionne pas très bien, et je t'invite à le tester en comparant les dates suivantes
date1 = 23/04/2003 13:30:10
date2 = 23/04/2005 13:30:10
le résultat devient 1A 11M 30J 0H 0M 0S alors qu'il y a tout juste 2 ans et un jour (2004 étant bissextile) ou 731 jours. Par ailleurs quand tu changes l'heure d'une seconde il y a une incohérence par ex avec date2 inchangé :
Si date1 = 23/04/2003 13:30:09 alors le résultat est 1A 11M 30J 0H 0M 1S
Si date1 = 23/04/2003 13:30:11 alors le résultat est 1A 11M 30J 23H 59M 59S

En dehors de ce type d incohérence le prog ne peut pas fonctionner car la notion de an/mois/jours est subjectivement variable en fonction du calendrier (plus exactement du mois)....

Ci-dessous voilà cependant ma suggestion de programme. POur l'appeler il faut comme pour Jack formater la chaine comme suit : "01/12/2005 01:23:45"

Function calc_Diff(date1 As String, Date2 As String) As String
calc_Diff = Calc_Ma_Diff_Date(date1, Date2) & Calc_Ma_Diff_Heure(date1, Date2)
End Function
Function Calc_Ma_Diff_Heure(date1 As String, Date2 As String) As String
Dim TimeDiff
TimeDiff = CDate(Date2) - CDate(date1)
TimeDiff = CDate(CDec(TimeDiff))
Calc_Ma_Diff_Heure = Format(TimeDiff, "h") & " heure(s) , " & Format(TimeDiff, "n") & " minute(s) et " & Format(TimeDiff, "s") & " seconde(s)."
End Function

Function Calc_Ma_Diff_Date(date1 As String, Date2 As String) As String
Dim DateDiff
Dim NbrAnnées
Dim NbrMois
Dim NbrJours
Dim var
Dim MyConst
MyConst = 365 / 12
DateDiff = CDate(Date2) - CDate(date1)
DateDiff = Fix(DateDiff)
var = DateDiff / 365
NbrAnnées = Fix(var)
NbrMois = Fix(((var - NbrAnnées) * 365) / MyConst)
NbrJours = Fix(((((var - NbrAnnées) * 365) / MyConst) - NbrMois) * MyConst)
Calc_Ma_Diff_Date = NbrAnnées & " an(s) " & NbrMois & " mois " & NbrJours & " jour(s)."
End Function

Ce code est cohérent dans les changement date/heure sauf dans les changements d'année (quoique...)
cs_kmw Messages postés 9 Date d'inscription dimanche 12 décembre 2004 Statut Membre Dernière intervention 19 juin 2007
23 avril 2005 à 10:25
Bonjour,

Je suis un modeste débutant, cependant je vous propose ce petit bout de code juste pour la différence heure(s)/minute(s)/seconde(s)

Function Calc_Diff_Heure(Date1 As String, Date2 As String) As String
Dim TimeDiff
TimeDiff = CDate(Date2) - CDate(Date1)
TimeDiff = CDate(CDec(TimeDiff))
Calc_Diff_Heure = Format(TimeDiff, "h") & " heure(s) , " & Format(TimeDiff, "n") & " minute(s) et " & Format(TimeDiff, "s") & " seconde(s)."
End Function

A plus
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
23 avril 2005 à 01:16
Salut
Je te propose la même chose en plus court en utilisant les formats de variables et les fonctions associées :
Par contre, il faudra revoir la mise en forme du résultat à ta convenance.
Sinon, tu as dû t'amuser à coder ça. On voit que tu as tester tout, chapeau.

Pour appeler ma version, il faut que les dates fournies soient au format date (lol) comme "01/12/2005 01:23:45"

Private Function Calc_Diff(ByVal maDate1 As Date, _
ByVal maDate2 As Date) As String

' Renvoie une chaine comme "2 ans 3 mois 18 jours ..."

Dim lAn As Long, lMois As Long, lJour As Long
Dim lHeure As Long, lMinute As Long, lSeconde As Long
Dim DateTemp As Date, Temp As String

' Remet les dates dans l'ordre si besoin : Date1 avant Date2
If maDate1 > maDate2 Then
DateTemp = maDate1
maDate1 = maDate2
maDate2 = DateTemp
End If

' L'inconvénient de DateDiff, c'est qu'il arrondi le résultat :
' Si on cherche le nombre d'années entre deux dates alors que _
ces dates ne sont séparées que de 11 mois, il renverra 1 an.
' Pour éviter cela, après avoir récupéré le nombre, on teste _
si la (Date1 + Nombre) > Date2, c'est qu'il y a eu un arrondi
' Dans ce cas, on enlève 1 et le tour est joué.

'--- Nombre d'années
lAn = DateDiff("yyyy", maDate1, maDate2)
If DateAdd("yyyy", lAn, maDate1) > maDate2 Then lAn = lAn - 1
' Décale la date d'autant
maDate1 = DateAdd("yyyy", lAn, maDate1)

'--- Nombre de mois
lMois = DateDiff("m", maDate1, maDate2)
If DateAdd("m", lMois, maDate1) > maDate2 Then lMois = lMois - 1
' Décale la date d'autant
maDate1 = DateAdd("m", lMois, maDate1)

'--- Nombre de jours
lJour = DateDiff("d", maDate1, maDate2)
If DateAdd("d", lJour, maDate1) > maDate2 Then lJour = lJour - 1
' Décale la date d'autant
maDate1 = DateAdd("d", lJour, maDate1)

'--- Nombre d'heures
lHeure = DateDiff("h", maDate1, maDate2)
If DateAdd("h", lHeure, maDate1) > maDate2 Then lHeure = lHeure - 1
' Décale la date d'autant
maDate1 = DateAdd("h", lHeure, maDate1)

'--- Nombre de minutes
lMinute = DateDiff("n", maDate1, maDate2)
If DateAdd("n", lMinute, maDate1) > maDate2 Then lMinute = lMinute - 1
' Décale la date d'autant
maDate1 = DateAdd("n", lMinute, maDate1)

'--- Nombre de secondes
lSeconde = DateDiff("s", maDate1, maDate2)

'Debug.Print lAn, lMois, lJour, lHeure, lMinute, lSeconde

' Mise en forme de la chaine à renvoyer :
Temp = IIf(lAn > 0, CStr(lAn) & " an(s) ", "")
Temp = Temp & IIf(lMois > 0, CStr(lMois) & " mois ", "")
Temp = Temp & IIf(lJour > 0, CStr(lJour) & " jours ", "")
Temp = Temp & IIf(lHeure > 0, CStr(lHeure) & " heure(s) ", "")
Temp = Temp & IIf(lMinute > 0, CStr(lMinute) & " minute(s) ", "")
Temp = Temp & IIf(lSeconde > 0, CStr(lSeconde) & " seconde(s)", "")
Calc_Diff = Temp

End Function
Rejoignez-nous