Vous êtes actuellement hors ligne, en attente de reconnexion à Internet.

Votre navigateur n’est pas pris en charge

Vous devez mettre à jour votre navigateur pour utiliser le site.

Mettre à jour vers la dernière version d’Internet Explorer

Calcul du nombre de jour ouvrés entre 2 dates

Ancien nº de publication de cet article : F17035
Résumé
Question :
==========

Comment calculer le nombre de jours ouvré entre 2 dates ?


Réponse :
=========

Le code ci-dessous ne gére pas les jours fériés.




? WorkWeek({05/09/95},{25/09/95})



FUNCTION WOrkWeek
PARAMETERS P_Date1, P_Date2

PRIVATE LIKE L_*

L_Journum = 0
L_NbjTot = 0
L_Nbjtrait = 0
L_JourPos = 0
L_Semaine = 0
L_NbjOuv = 0
*Calcul du nombre réel de jour entre L_Date1 et L_Date2
L_NbjDiff = P_Date2 - P_date1
*---------------------
* Callage sur un Lundi
*---------------------
L_NbjTot = L_NbjDiff
L_Nbjtrait = 0 && Contient le nombre de jour réels déjà traités
L_JourPos = 0 && Contient le N° de jour du Jour en cours de
decompte

L_Journum = DOW(P_Date1)
If L_Journum = 1 Or L_Journum = 7 Then && Test si Dimanche ou
Samedi
*-----------------------
* On est sur un Week End
*-----------------------
If L_Journum = 7 Then && Samedi
L_Nbjtrait = 1 && On a traité dimanche
L_JourPos = 2 && Le voilà notre premier Lundi
*----------------------------
*L_NbJouv est toujours à zéro
*----------------------------
EndIf
Else
*------------------------
*Ce N'est pas un Week End
*------------------------
If L_NbjTot < 7 Then
*------------------------------------
*Le total fait moins de 7 jours
*et le début est en milieu de semaine
*------------------------------------
If L_NbjTot + Journum < 6 Then
L_Nbjtrait = L_NbjTot
L_NbjOuv = L_NbjTot
*----------
*C'est fini
*----------
EndIf
Else
* Le total fait plus de 7 Jours et le début
* est en milieu de Semaine
*1) Ajustement au Lundi
L_Nbjtrait = (7 - L_Journum) + 1
L_NbjOuv = 6 - L_Journum
EndIf
EndIf

--
* A ce stade Si L_Nbjtrait < L_NbjTot on continue avec des semaines
pleines
* On ne traite que des semaines pleines

--
If L_Nbjtrait < L_NbjTot Then
* Ici on traite les x semaines pleines du solde des jours
* restants
L_Semaine = Int((L_NbjTot - L_Nbjtrait) / 7)
If L_Semaine > 0 Then
L_NbjOuv = L_NbjOuv + (L_Semaine * 5)
L_Nbjtrait = L_Nbjtrait + (L_Semaine * 7)
EndIf
* Ici de toute façon, on est sur un Lundi, et le reste
* n'est pas un semaine pleine (il faut le cas échéant
* Gommer la fin de la semaine
If L_NbjTot - L_Nbjtrait = 6 Then
L_NbjOuv = L_NbjOuv + 5
Else
L_NbjOuv = L_NbjOuv + (L_NbjTot - L_Nbjtrait)
EndIf
EndIf
Return L_NbjOuv
END FUNCTION
Propriétés

ID d'article : 467035 - Dernière mise à jour : 08/01/1997 00:00:00 - Révision : 1.0

  • Microsoft Visual FoxPro 3.0 Édition Standard
  • user KB467035
Commentaires
https://c1.microsoft.com/c.gif?DI=4050&did=1&t=">://c1.microsoft.com/c.gif?DI=4050&did=1&t=">m.name='ms.dqp0';m.content='false';document.getElementsByTagName('head')[0].appendChild(m);" src="http://c1.microsoft.com/c.gif?"> tml> "//c.microsoft.com/ms.js'><\/script>");