begin process at 2012 02 04 11:37:24
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Date & Heure

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

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


 Information sur la source

Note :
Aucune note
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 :9 815

Auteur : JMO

Ecrire un message privé
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

 Sources du même auteur

INVENTAIRE FICHIERS SUR SERVER DISTANT OU LOCAL
EVENTVIEWER - NTLOGEVENT - EXTRACTION INFORMATIONS DU JOURNA...
[VBSCRIPT] LISTE DES FICHIERS, D'UN RÉPERTOIRE, TRIÉS PAR DA...
[VBSCRIPT] RECHERCHE D'UN CARACTÈRE OU D'UNE CHAINE DE CARAC...
Source avec Zip EXEMPLES DE PROCÉDURES VBSCRIPT

 Sources de la même categorie

Source avec Zip Source avec une capture LES FONCTIONS DATE PAR L'EXEMPLE. par pasquet78
Source avec Zip Source avec une capture CALENDRIER, MODE D'EMPLOI par pasquet78
Source avec Zip Source avec une capture Source .NET (Dotnet) HORLOGE DIODE AVEC 3 ALARMES ET REMISE À L'HEURE par EhJoe
Source avec Zip Source avec une capture POINTEUSE HORAIRES PAR SEMAINE par VBNoob13
Source avec Zip Source avec une capture HORLOGE À AIGUILLES SIMPLEMENT DANS UN USERFORM EXCEL par bigbe

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture Source .NET (Dotnet) CALCULS DE DATES À PARTIR D'UN CALENDRIER par jcbouli
Source avec Zip UN PETIT PROG SANS PRÉTENTION POUR METTRE EN OEUVRE DATESERI... par lermite222
Source avec Zip Source avec une capture TEMPS ÉCOULÉ par jl
UNE VRAI PAUSE DANS LE CODE (COURT ET SIMPLE) par JEMAX
Source avec Zip NOMBRE DE JOURS par JLB59

Commentaires et avis

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???

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" ?

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

oui (à référencer manuellement)

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

tu ne dois pas avoir les exemples DANS la fonction

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

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,529 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales