cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 2015
-
23 avril 2005 à 01:11
cs_castagne
Messages postés20Date d'inscriptionjeudi 27 mars 2003StatutMembreDerniè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.
cs_castagne
Messages postés20Date d'inscriptionjeudi 27 mars 2003StatutMembreDernière intervention 9 janvier 2008 25 juin 2007 à 15:07
la meme mais en .net ??
j'ai pas trouvé
cs_Stephane
Messages postés550Date d'inscriptionvendredi 5 janvier 2001StatutMembreDernière intervention23 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és572Date d'inscriptionmardi 30 avril 2002StatutMembreDernière intervention 4 mai 20201 28 avril 2005 à 00:00
?????
cs_Stephane
Messages postés550Date d'inscriptionvendredi 5 janvier 2001StatutMembreDernière intervention23 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és572Date d'inscriptionmardi 30 avril 2002StatutMembreDernière intervention 4 mai 20201 23 avril 2005 à 15:50
oui j ai remarque que certaine date posaient probleme !
j y travaille !
:-)
cs_kmw
Messages postés9Date d'inscriptiondimanche 12 décembre 2004StatutMembreDernière intervention19 juin 2007 23 avril 2005 à 14:41
PS : Merci Jack pour ton code...j'ai encore appris qqch sur VBFRANCE.
cs_kmw
Messages postés9Date d'inscriptiondimanche 12 décembre 2004StatutMembreDernière intervention19 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és9Date d'inscriptiondimanche 12 décembre 2004StatutMembreDernière intervention19 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és14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 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)
25 juin 2007 à 15:07
j'ai pas trouvé
28 avril 2005 à 12:07
a+
28 avril 2005 à 00:00
27 avril 2005 à 23:52
et le datediff alors !!!!
a quoi ca sert sinon qu'il se décarcasse ! :D
dsl davoir fusillé ton code :D
a+
23 avril 2005 à 15:50
j y travaille !
:-)
23 avril 2005 à 14:41
23 avril 2005 à 14:14
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...)
23 avril 2005 à 10:25
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
23 avril 2005 à 01:16
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