Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

GESTION DES HEURES DE NUIT (22H-0H) - CALCUL DE DATES


Information sur la source

Catégorie :Date & Heure Classé sous : FormatDateTime, TimeSerial, DateDiff Niveau : Débutant Date de création : 08/11/2007 Date de mise à jour : 10/11/2007 01:51:34 Vu : 7 539

Note :
Aucune note

Commentaire sur cette source (5)
Ajouter un commentaire et/ou une note

Description

Ce script utilise les fonctions FormatDateTime, TimeSerial, DateDiff, Hour et Minute pour calculer les heures de travail de nuit (de 22h00 à 06h00).
J'ai volontairement scindé le calcul des dates (par facilité et pour lisibilité):
- si date1 = date2, le calcul s'effectue sur la même journée;
- si date1 <> date2, le calcul s'effectue sur date1 et date2(date1 +1).



 

Source

  • 'Gestion des heures de nuit (22h00 - 06h00)
  • '---------------------------------------------
  • '
  • Option Explicit
  • 'Exemples d'utilisation
  • MsgBox Demo(),,"Fonction Demo: Heures de nuit comprises entre 22h et 06h"
  • MsgBox MaDate("07/11/2007 20h05","07/11/2007 23h15") _
  • ,,"Fonction MaDate: Heures de nuit comprises entre 22h et 06h"
  • '-----------------------------------------------------------------------------
  • Function Demo()
  • Dim DateDebut, DateFin, Diff, i, Result
  • Dim Exemple(12)
  • 'Déclaration du tableau Exemple
  • Exemple(0) = Array("07/11/2007","06h05","07/11/2007","20h20")
  • Exemple(1) = Array("07/11/2007","20h05","07/11/2007","23h15")
  • Exemple(2) = Array("07/11/2007","22h15","07/11/2007","23h20")
  • Exemple(3) = Array("08/11/2007","00h05","08/11/2007","05h20")
  • Exemple(4) = Array("08/11/2007","00h05","08/11/2007","07h20")
  • Exemple(5) = Array("07/11/2007","20h05","08/11/2007","00h15")
  • Exemple(6) = Array("07/11/2007","20h05","08/11/2007","06h15")
  • Exemple(7) = Array("07/11/2007","23h30","08/11/2007","05h20")
  • Exemple(8) = Array("07/11/2007","23h30","08/11/2007","08h20")
  • Exemple(9) = Array("07/11/2007","06h05","07/11/2007","06h05")
  • Exemple(10) = Array("07/11/2007","06h05","09/11/2007","06h05")
  • Exemple(11) = Array("09/11/2007","06h05","07/11/2007","06h05")
  • For i=0 To UBound(Exemple)-1
  • DateDebut = CDate(Exemple(i)(0) & Space(1) & Replace(LCase(Exemple(i)(1)),"h",":"))
  • DateFin = CDate(Exemple(i)(2) & Space(1) & Replace(LCase(Exemple(i)(3)),"h",":"))
  • 'Différence en minutes entre les 2 dates
  • Diff = DateDiff("n",DateDebut,DateFin)
  • 'Exécution de la fonction VerifHeuresNuit avec comme variables:
  • 'DateDebut=jj/mm/ aaaa hh:mn:ss
  • 'DateFin=jj/mm/ aaaa hh:mn:ss
  • 'Diff=DateFin-DateDebut en minutes
  • 'et replace de : par h
  • Result = Result &vbCrLf& i+1 &vbTab& "Debut : " & _
  • DateDebut &Space(2)& "Fin : " & DateFin &vbTab& "Heures nuit : " & _
  • Replace(VerifHeuresNuit(DateDebut, DateFin, Diff),":","h")
  • Next
  • Demo = Result
  • End Function
  • '-----------------------------------------------------------------------------
  • Function MaDate(DateDebut, DateFin)
  • Dim Diff
  • 'Différence en minutes entre les 2 dates
  • DateDebut = Replace(LCase(DateDebut),"h",":")
  • DateFin = Replace(LCase(DateFin),"h",":")
  • Diff = DateDiff("n",DateDebut,DateFin)
  • MaDate = "Debut : " & DateDebut &Space(2)& "Fin : " & DateFin &vbTab& "Heures nuit : " & _
  • Replace(VerifHeuresNuit(DateDebut, DateFin, Diff),":","h")
  • End Function
  • '-----------------------------------------------------------------------------
  • Function VerifHeuresNuit(DateDebut, DateFin, Diff)
  • 'DateFin - DateDebut limitée à 15h00
  • If Diff > 0 And Diff < 900 Then
  • 'Comparaison DateDebut et DateFin (selon paramètres généraux)
  • 'FormatDateTime(Date,vbShortDate) retourne une date au format jj/mm/aaaa
  • 'FormatDateTime(Date,vbShorTime) retourne une heure au format hh:mm
  • Select Case CBool(FormatDateTime(DateDebut, vbShortDate) = FormatDateTime(DateFin, vbShortDate))
  • 'DateDebut = DateFin format jj/mm/aaaa
  • Case True
  • If Hour(DateDebut) >= 6 And Hour(DateFin) =< 22 Then
  • VerifHeuresNuit = FormatDateTime(TimeSerial(0, 0 , 0), vbShortTime)
  • ElseIf Hour(DateDebut) < 22 And Hour(DateFin) >= 22 Then
  • 'Hour(DateDebut) étant < 22h, DateDebut=jj/mm/aaaa 22:00:00
  • DateDebut = FormatDateTime(DateDebut, vbShortDate) & Space(1) & TimeSerial(22,0,0)
  • VerifHeuresNuit = FormatDateTime(TimeSerial(0,0 + DateDiff("n",DateDebut, CDate(DateFin)),0), vbShortTime)
  • ElseIf (Hour(DateDebut) >= 22 And Hour(DateFin) >= 22) Or _
  • (Hour(DateDebut) >= 0 And Hour(DateFin) < 6) Then
  • VerifHeuresNuit = FormatDateTime(TimeSerial(0, 0 + Diff, 0), vbShortTime)
  • ElseIf Hour(DateDebut) >= 0 And Hour(DateFin) >= 6 Then
  • 'Hour(DateFin) étant > 6h, DateFin=jj/mm/aaaa 06:00:00
  • DateFin = FormatDateTime(DateFin, vbShortDate) & Space(1) & TimeSerial(6,0,0)
  • VerifHeuresNuit = FormatDateTime(TimeSerial(0, 0 + _
  • DateDiff("n",DateDebut, DateFin), 0), vbShortTime)
  • End If
  • Exit Function
  • 'date1 < date2
  • Case False
  • If Hour(DateDebut) < 22 And Hour(DateFin) < 6 Then
  • VerifHeuresNuit = FormatDateTime(TimeSerial(0, 0 + _
  • DateDiff("n",FormatDateTime(DateDebut, vbShortDate) & _
  • Space(1) & TimeSerial(22,0,0),DateFin), 0), vbShortTime)
  • ElseIf Hour(DateDebut) < 22 And Hour(DateFin) >= 6 Then
  • VerifHeuresNuit = FormatDateTime(TimeSerial(8, 0 , 0), vbShortTime)
  • ElseIf Hour(DateFin) < 6 Then
  • VerifHeuresNuit = FormatDateTime(TimeSerial(0, 0 + Diff, 0), vbShortTime)
  • ElseIf Hour(DateFin) > 6 Then
  • 'Hour(DateFin) étant > 6h, DateFin=jj/mm/aaaa 06:00:00
  • DateFin = FormatDateTime(DateFin, vbShortDate) & Space(1) & TimeSerial(6,0,0)
  • VerifHeuresNuit = FormatDateTime(TimeSerial(0, 0 + _
  • DateDiff("n",DateDebut, DateFin), 0), vbShortTime)
  • End If
  • Exit Function
  • End Select
  • End If
  • VerifHeuresNuit = "dates non conformes"
  • End Function
'Gestion des heures de nuit (22h00 - 06h00)
'---------------------------------------------
' 
Option Explicit

'Exemples d'utilisation
MsgBox Demo(),,"Fonction Demo: Heures de nuit comprises entre 22h et 06h"

MsgBox MaDate("07/11/2007 20h05","07/11/2007 23h15") _
       ,,"Fonction MaDate: Heures de nuit comprises entre 22h et 06h"

'-----------------------------------------------------------------------------
Function Demo()
Dim DateDebut, DateFin, Diff, i, Result
Dim Exemple(12)
'Déclaration du tableau Exemple
Exemple(0)  = Array("07/11/2007","06h05","07/11/2007","20h20")
Exemple(1)  = Array("07/11/2007","20h05","07/11/2007","23h15")
Exemple(2)  = Array("07/11/2007","22h15","07/11/2007","23h20")
Exemple(3)  = Array("08/11/2007","00h05","08/11/2007","05h20")
Exemple(4)  = Array("08/11/2007","00h05","08/11/2007","07h20") 
Exemple(5)  = Array("07/11/2007","20h05","08/11/2007","00h15")
Exemple(6)  = Array("07/11/2007","20h05","08/11/2007","06h15")
Exemple(7)  = Array("07/11/2007","23h30","08/11/2007","05h20")
Exemple(8)  = Array("07/11/2007","23h30","08/11/2007","08h20")
Exemple(9)  = Array("07/11/2007","06h05","07/11/2007","06h05")  
Exemple(10) = Array("07/11/2007","06h05","09/11/2007","06h05")  
Exemple(11) = Array("09/11/2007","06h05","07/11/2007","06h05") 

For i=0 To UBound(Exemple)-1
    DateDebut =  CDate(Exemple(i)(0) & Space(1) & Replace(LCase(Exemple(i)(1)),"h",":"))
    DateFin   =  CDate(Exemple(i)(2) & Space(1) & Replace(LCase(Exemple(i)(3)),"h",":"))
    
    'Différence en minutes entre les 2 dates
    Diff =  DateDiff("n",DateDebut,DateFin)
    
    'Exécution de la fonction VerifHeuresNuit avec comme variables:
    'DateDebut=jj/mm/ aaaa hh:mn:ss 
    'DateFin=jj/mm/ aaaa hh:mn:ss 
    'Diff=DateFin-DateDebut en minutes
    'et replace de : par h
    Result = Result &vbCrLf& i+1 &vbTab& "Debut : " & _
             DateDebut &Space(2)& "Fin : " & DateFin &vbTab& "Heures nuit : " & _
             Replace(VerifHeuresNuit(DateDebut, DateFin, Diff),":","h")
Next
Demo = Result
End Function
'-----------------------------------------------------------------------------
Function MaDate(DateDebut, DateFin)
Dim Diff
'Différence en minutes entre les 2 dates
DateDebut =  Replace(LCase(DateDebut),"h",":")
DateFin   =  Replace(LCase(DateFin),"h",":")
Diff =  DateDiff("n",DateDebut,DateFin)
MaDate = "Debut : " & DateDebut &Space(2)& "Fin : " & DateFin &vbTab& "Heures nuit : " & _
         Replace(VerifHeuresNuit(DateDebut, DateFin, Diff),":","h")

End Function
'-----------------------------------------------------------------------------
Function VerifHeuresNuit(DateDebut, DateFin, Diff)
'DateFin - DateDebut limitée à 15h00
If Diff > 0 And Diff < 900 Then
 
   'Comparaison DateDebut et DateFin (selon paramètres généraux)
   'FormatDateTime(Date,vbShortDate) retourne une date  au format jj/mm/aaaa  
   'FormatDateTime(Date,vbShorTime)  retourne une heure au format hh:mm 
   Select Case CBool(FormatDateTime(DateDebut, vbShortDate) = FormatDateTime(DateFin, vbShortDate))
     
     'DateDebut = DateFin  format jj/mm/aaaa
     Case True
     
          If Hour(DateDebut) >= 6 And Hour(DateFin) =< 22 Then
             VerifHeuresNuit = FormatDateTime(TimeSerial(0, 0 , 0), vbShortTime) 

          ElseIf Hour(DateDebut) < 22 And Hour(DateFin) >= 22 Then
             'Hour(DateDebut) étant < 22h, DateDebut=jj/mm/aaaa 22:00:00
             DateDebut = FormatDateTime(DateDebut, vbShortDate) & Space(1) & TimeSerial(22,0,0) 
             VerifHeuresNuit = FormatDateTime(TimeSerial(0,0 + DateDiff("n",DateDebut, CDate(DateFin)),0), vbShortTime)

          ElseIf (Hour(DateDebut) >= 22 And Hour(DateFin) >= 22) Or _
                 (Hour(DateDebut) >= 0 And Hour(DateFin) < 6) Then
             VerifHeuresNuit = FormatDateTime(TimeSerial(0, 0 + Diff, 0), vbShortTime) 
          
          ElseIf Hour(DateDebut) >= 0 And Hour(DateFin) >= 6 Then 
             'Hour(DateFin) étant > 6h, DateFin=jj/mm/aaaa 06:00:00 
             DateFin = FormatDateTime(DateFin, vbShortDate) & Space(1) & TimeSerial(6,0,0)
             VerifHeuresNuit = FormatDateTime(TimeSerial(0, 0 + _ 
                               DateDiff("n",DateDebut, DateFin), 0), vbShortTime)
          End If
          Exit Function
   
 
   'date1 < date2
   Case False
   
          If Hour(DateDebut) < 22 And Hour(DateFin) < 6 Then
             VerifHeuresNuit = FormatDateTime(TimeSerial(0, 0 + _ 
                               DateDiff("n",FormatDateTime(DateDebut, vbShortDate) & _
                               Space(1) & TimeSerial(22,0,0),DateFin), 0), vbShortTime)
                               
          ElseIf Hour(DateDebut) < 22 And Hour(DateFin) >= 6 Then  
             VerifHeuresNuit = FormatDateTime(TimeSerial(8, 0 , 0), vbShortTime) 
           
          ElseIf Hour(DateFin) < 6 Then 
             VerifHeuresNuit = FormatDateTime(TimeSerial(0, 0 + Diff, 0), vbShortTime)
           
          ElseIf Hour(DateFin) > 6 Then
             'Hour(DateFin) étant > 6h, DateFin=jj/mm/aaaa 06:00:00 
             DateFin = FormatDateTime(DateFin, vbShortDate) & Space(1) & TimeSerial(6,0,0) 
             VerifHeuresNuit = FormatDateTime(TimeSerial(0, 0 + _ 
                               DateDiff("n",DateDebut, DateFin), 0), vbShortTime)
                
   End If
   Exit Function
   End Select
End If
VerifHeuresNuit = "dates non conformes"
End Function

Conclusion

Via PCPT, ce script a évolué  mais reste certainement perfectible de par vos remarques.


 

Historique

08 novembre 2007 19:36:34 :
renvois à la ligne
08 novembre 2007 19:59:47 :
Replace(script, DateDiff("n",DateDebut,DateFin), Diff)
08 novembre 2007 21:38:15 :
Création d'un tableau pour msgbox des 8 exemples
10 novembre 2007 01:49:21 :
Creation d'une fonction Demo() et d'une fonction MaDate() + ajout commentaires
10 novembre 2007 01:51:34 :
Creation d'une fonction Demo() et d'une fonction MaDate() + commentaires

Commentaires et avis

signaler à un administrateur
Commentaire de PCPT le 08/11/2007 20:42:35 administrateur CS

salut,

euh... perso je m'y perds avec tes "exemple X" dans le retour de la fonction.
logiquement tu devrais avoir 8 appels de fonction avec les bons paramètres non???

signaler à un administrateur
Commentaire de JMO le 08/11/2007 21:03:31

Bonsoir PCPT,
Je vais regarder pour mettre les variables dans un tableau ou un dictionnaire,
et rajouter quelques commentaires.
Est-ce que vb6 "possède" l'objet "Scripting.Dictionary" ?

signaler à un administrateur
Commentaire de PCPT le 08/11/2007 21:26:13 administrateur CS

oui (à référencer manuellement)

signaler à un administrateur
Commentaire de PCPT le 09/11/2007 20:03:10 administrateur CS

tu ne dois pas avoir les exemples DANS la fonction

signaler à un administrateur
Commentaire de JMO le 09/11/2007 20:40:23

Bonjour PCPT,
Je corrige:
- replace split par array
- suppresion du datefin dans exemple5
- suppression du numéro d'exemple
- nombre d'exemples
et commentaires.
J'ai posté trop vite !!!
Sur le principe, la fonction est ok.
Par contre, j'aimerais bien éviter le -22 dans
FormatDateTime(TimeSerial(Hour(DateFin) - 22, Minute(DateFin), 0),vbShortTime)

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Comparaison de dates [ par TheDude ] Je cherche à comparer deux dates au moyen de la fonction DateDiff intégréesous access et tester le résultat dans un If dont voici un exemple : If DateDiff ??? [ par MEGATRIX ] Comment utilisé DateDiff?avec la date et l'heure?merci@++Megatrix DateDiff [ par rino ] Je connais la fonction DateDiff, mais elle ne fonctionne pas si je charge mon petit programme en VB6 sur un PC qui a un autre format de la date (p.ex datediff !!! [ par jcheseaux ] Salut écoutez j'ai un problème je voudrai afficher la durée de temps depuis kon ouvre mon programme... J'ai bien essayer la fonction datediff mais com DateDiff [ par Nuit6 ] Bonjour à tous,J'aimerais restituer le résultat de la fonction DateDiff() en nbre d'années et nbre de jours. Exemple :DateDiff("d", 28.12.2003, 31.12. Erreur de syntaxe dans une requête utilisant DATEDIFF() [ par Eric25 ] Bonjour,Je suis en train de r&#233;aliser une application de gestion de la restauration d'un &#233;tablissement. Je doit r&#233;aliser une requ&#234;t Particularité DateDiff [ par CharlesZan ] J'avais un petit probl&#232;me r&#233;cemment avec cette fonction.... Apr&#232;s avoir lu les solutions plut&#244;t froide de developpeurs plus exp&#2 function datediff [ par cerbain1 ] L'utilisateur doit entrer sa date de naissance: jour et annee avec un numericupdown control mois avec un domaine updown control.&nbsp; ex: 1 Janvier 2 Datediff erreur [ par Dark Revan ] J'utilise la fonction Datediff et elle marche tr&#232;s bien sauf lorsque certains nombres arrivent. Temps = DateDiff("n", 0, "0:" &amp; Minute) Min datediff [ par omarsoft22 ] baa voila mon probleme c'est que j'ai une table contrat avec un champ date_fin_contrat est je veux afficher une alerte de fin de contrat merci d'avanc


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,515 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.