begin process at 2012 02 08 21:27:06
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Date/Heure

 > CALUL DE LA DATE DE FIN À PARTIR D'UNE DURÉE - ENLÈVE LES WEEK-ENDS

CALUL DE LA DATE DE FIN À PARTIR D'UNE DURÉE - ENLÈVE LES WEEK-ENDS


 Information sur la source

 Description

Cette fonction calcule la date de fin à partir d'une date de début et d'une durée. Pas compliqué. Mais là où ça se corse c'est qu'il faut enlever les week-ends.
Cette fonction utilise la récursivité.

Source

  • <%
  • '//---------------------------------------------------------------------------
  • '// CALCULE la date de fin et Enlève les jours des week-ends
  • '//---------------------------------------------------------------------------
  • dim cpte
  • Function CalculDateFin(DateD, duree)
  • Dim NbJourWE
  • Dim DateC, DateFin
  • '//Cas de la durée non entière : ex. 2,5 jours
  • If (CStr(duree) > CStr(Int(duree))) Then
  • duree = duree + 1
  • End If
  • DateC = DateD
  • DateFin = DateAdd("d", Int(duree), DateC)
  • If (cpte = 0) Then
  • DateFin = DateAdd("d", duree - 1, DateC)
  • Else
  • If (DatePart("w", DateC) = 1 Or DatePart("w", DateC) = 7) Then
  • DateC = DateAdd("d", 1, DateC)
  • End If
  • End If
  • cpte = cpte + 1
  • While (CDate(DateC) <= DateFin)
  • If (DatePart("w", DateC) = 1 Or DatePart("w", DateC) = 7) Then
  • NbJourWE = NbJourWE + 1
  • End If
  • DateC = DateAdd("d", 1, DateC)
  • Wend
  • If (NbJourWE > 0) Then
  • DateFin = CalculDateFin(DateFin, NbJourWE)
  • NbJourWE = 0
  • End If
  • cpte = 0
  • CalculDateFin = DateFin
  • End Function
  • %>
<%
'//---------------------------------------------------------------------------
'//                  CALCULE la date de fin et Enlève les jours des week-ends
'//---------------------------------------------------------------------------
dim cpte
Function CalculDateFin(DateD, duree)
        
    Dim NbJourWE
    Dim DateC, DateFin

   '//Cas de la durée non entière : ex. 2,5 jours	
   If (CStr(duree) > CStr(Int(duree))) Then
        duree = duree + 1
   End If    

    DateC = DateD
    DateFin = DateAdd("d", Int(duree), DateC)
    If (cpte = 0) Then
        DateFin = DateAdd("d", duree - 1, DateC)
    Else
        If (DatePart("w", DateC) = 1 Or DatePart("w", DateC) = 7) Then
            DateC = DateAdd("d", 1, DateC)
        End If
    End If
    
    cpte = cpte + 1
    While (CDate(DateC) <= DateFin)
           
        If (DatePart("w", DateC) = 1 Or DatePart("w", DateC) = 7) Then
            NbJourWE = NbJourWE + 1
        End If
        DateC = DateAdd("d", 1, DateC)
       

    Wend
    If (NbJourWE > 0) Then
        DateFin = CalculDateFin(DateFin, NbJourWE)
        NbJourWE = 0
    End If
    cpte = 0
    CalculDateFin = DateFin
    
         
End Function
%>

 Conclusion

J'espère que cette fonction sera utile à quelqu'un.
J'ai la même fonction en C++ et une autre plus simple qui calcule la durée entre 2 dates sans compter les week-ends
A bientôt
Tatal


 Sources de la même categorie

CONVERSION D'UNE DATE/HEURE STANDARD VERS DATE/HEURE CONFORM... par processus
CALCUL DE L'AGE D'UNE PERSONNE (ASP VBSCRIPT) par bluedemon
CONVERSION DE GMT À LOCAL ET DE LOCAL À GMT par revolt
Source avec Zip CALENDRIER DYNAMIQUE AVEC JOURS FERIES par label97
SAISIR DATE FR DANS MYSQL par jeckel

Commentaires et avis

Commentaire de Bud le 23/04/2004 10:33:12

En quoi c'est récursif?

Commentaire de jesusonline le 23/04/2004 18:06:47 administrateur CS

C'est recursif car la fonction s'appelle elle meme 6 lignes avant la fin.

Commentaire de Bud le 28/04/2004 09:05:58

Autant pour moi, je l'avais pas vu celle-ci.
Mais il n'y aurait pas eu plus simple?
Du style compter le nombre de semaine dans la durée (sachant qu'il y a 5 jours dans la semaine) et rajouter encore 2 jours si il faut...

Commentaire de nickadele le 11/05/2004 14:22:45 administrateur CS

Attention car la fonction DatePart pourrait te renvoyer 6 ou 7 au lieu de 7 ou 1, le mieux serait de forcer la fonction en définissant quel est le premier jour de la semaine ( lundi ou dimanche) ce qui donnerait :
DatePart("w", DateC, vbSunday)  dans ton cas.

Comme le dit Bud, y a plus simple ;o)
DateT = DateD
i = 0
tant que i &lt; duree faire
DateT = DateAdd("d",1,DateT)
si DatePart("w", DateT, vbSunday)   &lt;&gt; 1  and DatePart("w", DateT, vbSunday)  &lt;&gt;7 faire
i = i +1
fin si
fin tant que

mafonction = DateT

ca devrait etre un truc du genre :o)

Commentaire de nickadele le 11/05/2004 14:42:37 administrateur CS

autant pour moi, DatePart("w", DateC) est bon également puisqu'il te renvoi le numéro du jour peu importe le premier jour de la semaine.

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

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 : 0,530 sec (3)

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