|
Trouver une ressource
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
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
Sources de la même categorie
Sources en rapport avec celle ci
Commentaires et avis
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éaliser une application de gestion de la restauration d'un établissement. Je doit réaliser une requêt
Particularité DateDiff [ par CharlesZan ]
J'avais un petit problème récemment avec cette fonction.... Après avoir lu les solutions plutôt froide de developpeurs plus exp
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. ex: 1 Janvier 2
Datediff erreur [ par Dark Revan ]
J'utilise la fonction Datediff et elle marche très bien sauf lorsque certains nombres arrivent. Temps = DateDiff("n", 0, "0:" & 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
|
Comparez les prix Nouvelle version
|