Différence entre 2 dates

Résolu
gibea00 Messages postés 17 Date d'inscription mercredi 29 janvier 2003 Statut Membre Dernière intervention 13 novembre 2007 - 28 févr. 2007 à 16:33
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 - 1 mars 2007 à 09:31
Bonjour !

J'aimerais faire la différence entre 2 dates du même titre que dans l'exemple et que le résultat serait en heures et minutes.   J'ai essayé d'utiliser DateDiff, mais il semble que je puisse avoir mon résultat en heure ou en minute et non les deux.  Et la fonction arrondie le résultat.

Exemple : 28-02-2007 11:00:00 -  28-02-2007 10:03:05  

Le résultat serait  :  0:56:55   

Es-ce que quelqu'un serait en mesure de m'aider ?

Merci

Alexandre

23 réponses

jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
28 févr. 2007 à 21:33
Bon (j'ai le tournis)

Veux-tu tester ceci, jean-Marc ?

Private Sub Command1_Click()
  Date1 = "03/31/2009 11:00:00"
  date2 = "02/27/2007 11:03:05"
  diff = DateDiff("s", date2, Date1)
  nouvdate = DateAdd("s", diff, "01/01/2000")
  nouvdate = DateAdd("d", -1, nouvdate)
  tempsj = DateDiff("d", "01/01/2000", nouvdate)
  If TimeValue(date2) > TimeValue(Date1) Then tempsj = tempsj - 1
  tempsh = Format(nouvdate, "hh:mm:ss")
  MsgBox tempsj & " jours " & tempsh
End Sub

Je ne compte no les années ni les mois car celà ne veut finalement rien dire en durée (évidemment) et dépend totalement de la date de départ. On ne peut mathématiquement compter une durée qu'en jours, heures, minutes et secondes (le nombre d'années et de mois écoulés ne veulent intrinséquement rien dire en durée pure)
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
28 févr. 2007 à 22:23
 Re,

Date1 = "03/31/2009 11:00:00"
date2 = "02/27/2007 11:03:05"
  diff = DateDiff("s", date2, Date1)
  nouvdate = DateAdd("s", diff, "01/01/2000")
  nouvdate = DateAdd("d", -1, nouvdate)
  tempsj   = DateDiff("d", "01/01/2000", nouvdate)
 
  If TimeValue(date2) > TimeValue(Date1) Then tempsj = tempsj - 1
 
  MsgBox nouvdate &vbCrLf& tempsj
 
 'nouvdate affiche 31/01/2002 23:56:55
 'tempj    affiche 760 (jours)
 
 'tempsh = Format(nouvdate, "hh:mm:ss")  ' format n'est pas accepté en vbs

pour ma part, j'ai simplement fait:
Date1 = "03/31/2009 11:00:00"
date2 = "02/27/2007 11:03:05"



'années
MsgBox CInt((CDate(Replace(Left(date1,10),"-","/")) - CDate(Replace(Left(date2,10),"-","/"))) / 365) & " ans",,"test1 retourne 2 ans"
Msgbox  (DateDiff("yyyy",CDate(Replace(date2,"-","/")), CDate(Replace(date1,"-","/")))) & " ans",,"test2 retourne 2 ans"




'jours
MsgBox CLng(CDate(Replace(Left(date1,10),"-","/")) - CDate(Replace(Left(date2,10),"-","/"))) & " jours",,"test3 retourne 763 jours"
MsgBox CInt(CDate(Replace(date1,"-","/")) - CDate(Replace(date2,"-","/"))),,"test4 retourne 763 jours"
MsgBox DateDiff("d",date2, date1),,"test5 retourne 763" 




'hh:mn:sc
MsgBox FormatDateTime(CDate(Replace(date1,"-","/")) - CDate(Replace(date2,"-","/")),3),,"test5 retourne 23:56:55"

 
 Bon, je vais faire une pause sur ce faux problème.
Moi aussi, j'ai le tournis (apéro + surveillance exploit fin de mois sur "mon" gcos7) ....

jean-marc
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
1 mars 2007 à 09:31
Ouais !
Cette affaire m'a empêché de dormir !
J'y ai pensé et repensé ...
Il y a en fait 2 sortes de durées :
1) la durée temporelle (elle ne peut être calculée qu'en temps "solaire" écoulé, donc et uniquement en jours, heures, minutes, et secondes)
2) la durée "calendaire" (celle que l'on utilise par exemple, pour calculer un âge et dont la valeur n'est pas toujours égale à la durée "solaire" écoulée ...)

L'affaire se complique du fait que, à moins de partir des secondes et, par des opérations arithmétiques pures, d'en déduire la durée (qui ne peut alors s'exprimer qu'en temps "solaire", on se heurte systématiquement à des obstacles divers, résultant notamment (mais pas seulement) du fait que Datediff interrogé sur le nombres de secondes écoulées, par exemple, inclut bien évidemment de même nombre dans le nompbre de jours écoulés qu'on lui demanderait de calculer ! Il en va de même en ce qui concerne les heures, les minutes et les secondes.

J'ai déjà résolu ce 1er aspect cette nuit pour calculer te temps "solaire" écoulé en utilisant datediff (donc sans le calcul arithmétique sur des secondes). Je vous en exposerai le raisonnement in fine.

A +

Il me reste (et je m'y attacherai aujourd'hui) à tenter d'appliquer la même méthode pour, avec un simple passage de paramètres, parvenir à calculer également, avec le même outil, la durée "calendaire".

Tout celà est fort intéressant comme gymnastique de l'esprit, vous verrez.
0
Rejoignez-nous