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

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 à 17:25
 Bonjour à tous

Un petit peu plus simple que notre ami Mortalino.

date1= CDate("28-02-2007 10:04:00")
date2= CDate("28-02-2007 10:03:05")
Temps = DateDiff("n",date2, date1)   ' n pour seconde


hh = Temps / 3600
mn = (hh - Int(hh)) * 60
sc = (mn - Int(mn)) * 60
hh = Int(hh)If Len(hh) 1 Then hh "0" & hh
mn = Int(mn)If Len(mn) 1 Then mn "0" & mn
sc = Int(sc)If Len(sc) 1 Then sc "0" & sc
duree = hh & ":" & mn & ":" & sc




MsgBox duree

jean-marc
3
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
28 févr. 2007 à 17:03
Salut,

j'ai une fonction qui gère la différence de dates avec le résultat voulu ; seul variante : j'ai pas les secondes, c'est un arrondi par la minute :

Public Function EcartDate(ByVal DateDebut As Date, ByVal HeureDebut As Date, ByVal DateFin As Date, ByVal HeureFin As Date) As
String
    Dim dStart As Date, dEnd As Date, dEcart As Long, lTemp As Long
    
dStart = DateDebut & Space(1) & HeureDebut
dEnd = DateFin & Space(1) & HeureFin
dEcart = DateDiff("n", CDate(dStart), CDate(dEnd))
Select Case dEcart
    Case 1 To 59
        EcartDate = dEcart & "
minute(s)"
    Case 60
        EcartDate = "1 heure"
    Case 61 To 1439
        EcartDate = dEcart \ 24 & " heure(s) " & dEcart Mod 24 & "
minute(s)"
    Case 1440
        EcartDate = "1
jour"
    Case Is > 1441
        lTemp = dEcart \ (24 * 60)
        EcartDate = lTemp & " jour(s)
" & ((dEcart - (lTemp * (24 * 60))) \ 60) & "
heure(s) " & _
            ((dEcart - (lTemp * (24 * 60)))
Mod 60 * (((dEcart - (lTemp * (24 * 60))) \
60))) & " minute(s)"
End Select
End Function
'  
**************************************************************
Sub Exemple_Utilisation()
    'tes dates
: 28-02-2007 11:00:00 -  28-02-2007 10:03:05
    
    MsgBox EcartDate(#2/28/2007#, "10:03", #2/28/2007#, "11:00")
    ' Résultat : 57 minute(s)
    
    
    '
AUTRE EXEMPLES
    MsgBox EcartDate(#11/10/2005#, "19:58", #11/15/2006#, "21:00")
    MsgBox EcartDate(39036, 0.625, 39037, 0.625)
End Sub


~ <small>[code.aspx?ID=39466 Mortalino] ~
Colorisation automatique</small>

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
28 févr. 2007 à 17:30
Salut Jean-Marc,

Oui, c'est plus complexe pour ma fonction à cause des jours, par contre je viens de tester ta fonction, et sur ton exemple, au lieu d'avoir 00:00:55, j'ai 00:00:01

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
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 à 17:30
 Re,

désolé, erreur dans mon "copier", mettre "s" à la place de "n"
s=seconde
n=minute

jean-marc
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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 à 17:32
Et si on allait à dy jmfien ?
(j'ai choisi le 01/01 de l'année 2000 mais j'aurais pu prendre n'importe quelle autre année) :

Allons-y , avec le compte des jours en prime !

Private Sub Command1_Click()
  date1 = "28-02-2007 11:00:00"
  date2 = "28-02-2007 10:03:05"
  d = DateAdd("s", DateDiff("s", date2, date1), "01-01-2000")
  MsgBox Format(date1, "d") - Format(date2, "d") & " jours " & Format(d, "hh:mm:ss")
End Sub
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
28 févr. 2007 à 17:32
Bien vu 

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
28 févr. 2007 à 17:35
Salut JmfMarques,

pas mal aussi ta fonction, dommage qu'elle ne gère (pas encore ?) les jours au-delà d'un an 

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
0
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 à 17:37
Salut, Mortalino,

Je peux, je peux !
Je peux même compter les siècles si tu veux (tu veux ?)
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
28 févr. 2007 à 17:41
Je n-en doûte pas
Avec plaisir, et tu pourrais même la déposer ici :
LA

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
0
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 à 17:43
Allez,

Je vais m'arrêter aux années car le reste est évident (il suffit d'utiliser une division par 100 pour les siècles et prendre le reste pour les années...)

Private Sub Command1_Click()
  date1 = "28-02-2009 11:00:00"
  date2 = "27-02-2007 10:03:05"
  d = DateAdd("s", DateDiff("s", date2, date1), "01-01-2000")
  MsgBox Format(date1, "yyyy") - Format(date2, "yyyy") & " ans " & Format(date1, "d") _
  - Format(date2, "d") & " jours " & Format(d, "hh:mm:ss")
End Sub
0
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 à 17:46
Ouille !
Je suis le ropi des endormis, aujourd'hui !

Attends !
Il faut que je corrige et je reviens !
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 à 17:47
 Re,

si si Mortalino, pour gérer jj/mm/aaaa, il faut prendre l'exemple de Jacques, qui est presque en vbs
je vais tester son exemple...apparemment, il suffit d'utiliser FormatDateTime et jouer
avec des replace puisque format n'existe pas en vbs

jean-marc
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
28 févr. 2007 à 17:47
C'est parfait  ;)
Comme quoi il y a toujours plus court. Ta fonction étant très bien est plus courte que la mienne, n'hésite pas à la déposer sur Codyx

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
0
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 à 17:53
Et voilà mon corrrigé :

Private Sub Command1_Click()
  date1 = "31-03-2009 11:00:00"
  date2 = "27-02-2007 10:03:05"
  d = DateAdd("s", DateDiff("s", date2, date1), "01-01-2000")
  MsgBox Format(d, "yyyy") - 2000 & " ans " & Format(d, "m") - 1 & " mois " & _
   Format(d, "d") - 1 & " jours " & Format(d, "hh:mm:ss")
End Sub
0
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 à 17:57
=>> Mortalino :

A toi l'honneur de déposer (mais prends la toute dernière, hein... car l'avant dernière a un petit bug, que j'ai corrigé)
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
28 févr. 2007 à 18:02
Non non, c-est la tienne, pis la mienne y est déjà.
L-honneur te revient 
Et je trouve ça interressant d-en déposer plusieurs, c-est ainsi que l-on voit que certaines choses sont plus simples que l-on ne peut le croire  ;)
(Ps : même login qu-ici)

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
0
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 à 18:06
Non M'sieur Mortalino...
J'ai assez travaillé et c'est l'heure du pastis ...
A toi la corvée  (si tu ne le fais pas, je ne le ferai pas non plus, alors.... )
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
28 févr. 2007 à 18:15
Alors je poste mais t'es nommé  ;)
Bon pastaga 

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
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 à 19:36
 Re,

Une petite question pour Jacques,

Quelle date te retourne le msgbox ???

avec

Private Sub Command1_Click()
  date1 = "31-03-2009 11:00:00"
  date2 = "27-02-2007 23:03:05"
  d = DateAdd("s", DateDiff("s", date2, date1), "01-01-2000")
  MsgBox Format(d, "yyyy") - 2000 & " ans " & Format(d, "m") - 1 & " mois " & _
   Format(d, "d") - 1 & " jours " & Format(d, "hh:mm:ss")
End Sub

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
28 févr. 2007 à 20:33
Bonjour Jean-Marc :

ce n'est pas une date, mais une durée.

2 ans 1 mois 0 jours 11:56:55

2 ans c'est bon
1 mois c'est bon
0 jour, c'est bon, car il ne s'est pas écoulé 24 heures entre le 23h.03.05 et 11h.00.00,
11h.56.55 n'est en effet pas bon car 11.56.55 + 23:03:05 35:59:60 36:00:00 = 24 + 12 et non 24 + 11 comme il se devrait.

Tu as en effet mis le doigt sur une erreur importante et, du coup, sur 2 autres erreurs :

Dès lors que l'on passe à la durée, les dates ne signifient plus rien et il est vain de calculer les mois et les années car, par exemple, ol y a 366 jours entre le 01/01/2000 et le 31/12/2000 alors qu'il n'y en a que 365 entre le 01/01/1999 et le 31/12/1999 (bornes incluses). Maos ce n'est pas le seul embêtement ....

je corrige donc et reviens.

Merci
0
Rejoignez-nous