ATOUTFOX
COMMUNAUTÉ FRANCOPHONE DES PROFESSIONNELS FOXPRO
Visual FoxPro : le développement durable

JourFeries.prg   



L'auteur

Black Sabbath
France France
Membre Simple
# 0000000106
enregistré le 03/11/2004

http://omiro.free.fr
59 ans
MIRO Olivier
de la société Institut National du Cancer
Fiche personnelle


Note des membres
pas de note

Contributions > 01 - PRG : Programmation > Temps - heures - Dates - Calendriers

JourFeries.prg
# 0000000783
ajouté le 14/02/2011 10:51:30 et modifié le 14/02/2011
consulté 3176 fois
Niveau débutant

Version(s) Foxpro :
VFP 9.0
VFP 8.0

Description
lMajore = JourDerie(m.dDate) OR (DOW(m.dDate) = 7) && "dimanche"
Code source :
FUNCTION JourFerie(dDate As Date)

Annee = YEAR(m.dDate)

iTemp1 = MOD(m.Annee, 19)
iTemp2 = MOD(m.Annee, 4)
iTemp3 = MOD(m.Annee, 7)
iTemp4 = MOD((19 * m.iTemp1 + 24), 30)
iTemp5 = MOD(((2 * m.iTemp2) + (4 * m.iTemp3) + (6 * m.iTemp4) + 5), 7)
iTemp6 = 22 + m.iTemp4 + m.iTemp5

iJ = IIF(m.iTemp6 > 31,m.iTemp6 - 31,m.iTemp6)

dLundiPaques = CTOD("^" ;
  + STR(m.Annee,4) ;
  + IIF(m.iTemp6 > 31,"/04/","/03/") ;
  + PADL(m.iJ, 2, "0") ;
  ) + 1  && Paques + 1 jour

iMonth = MONTH(m.dDate)
iDay = DAY(m.dDate)

RETURN ( ;
  (m.iMonth = 1 AND m.iDay = 1) ;  && jour de l'an
  OR (m.iMonth = 5 AND m.iDay = 1) ;  && fete du travail
  OR (m.iMonth = 5 AND m.iDay = 8) ;  && victoire 1945
  OR (m.iMonth = 7 AND m.iDay = 14) ;  && fete nationale
  OR (m.iMonth = 8 AND m.iDay = 15) ;  && assomption
  OR (m.iMonth = 11 AND m.iDay = 1) ;  && toussaint
  OR (m.iMonth = 11 AND m.iDay = 11) ;  && armistice
  OR (m.iMonth = 12 AND m.iDay = 25) ;  && noel
  OR (m.dDate = m.dLundiPaques) ;  && lundi de paques
  OR (m.dDate = m.dLundiPaques + 39) ;  && ascencion
  OR (m.dDate = m.dLundiPaques + 49) ;  && lundi de pentecote VARIABLE SELON L'ETB
  )

Commentaires
le 17/02/2011, Luc a écrit :
Super pour le lundi de paques et les autres dates variables.
Juste un défaut :
Si par hasard on ne fait pas Annee = YEAR(m.dDate) mais Année = Val(UneAnnéeSousFormeDeChaineDeCaractères"), VFP n'interpréte pas l'année sous la même forme numérique, et dLundiPaques vaut vide ({//}) (au moins dans le cas de 2012). En effet, dans le cas de 2012, PADL(m.iJ, 2, "0") renvoie "8." au lieu de "08". La nouvelle formule ci-dessous semble fonctionner dans tous les cas :
dLundiPaques = CTOD("^" ;
+ STR(m.Annee,4) ;
+ IIF(m.iTemp6 > 31,"/04/","/03/") ;
+ PADL(Transform(m.iJ), 2, "0") ;
) + 1 && Paques + 1 jour



le 17/02/2011, Black Sabbath a écrit :
et pourquoi j'avais marqué "dDate As Date" ???
Cela sert à quoi que Ducros se décarcasse (pub 1991) !

En revanche, attention à
OR (DOW(m.dDate) = 7) && "dimanche"
Selon les paramétrages, dimanche == 1 !!!

le 17/02/2011, Luc a écrit :
Certes, dDate as Date est indiqué, mais j'ai du modifier : dans mon cas je dois demander à l'utilisateur de saisir l'année qu'il souhaite, et je le fais par un InputBox, qui me renvoie l'année sous forme caractère...

Autre chose : après vérification sur plusieurs années, le calcul de la date de l'ascension tombe toujours le lendemain de la vraie date...
Je remplace donc
OR (m.dDate = m.dLundiPaques + 39) ; && ascencion
par
OR (m.dDate = m.dLundiPaques + 38) ; && ascencion

Pour le dimanche, il vaut mieux utiliser le second paramètre de DOW, et remplacer
OR (DOW(m.dDate) = 7) && "dimanche"
par
OR (DOW(m.dDate, 2) = 7) && "dimanche" pour forcer le 1er jour de la semaine au lundi...

le 17/02/2011, Black Sabbath a écrit :
Très bonne idée, merci

Publicité

Les pubs en cours :


www.atoutfox.org - Site de la Communauté Francophone des Professionnels FoxPro - v3.4.0 - © 2004-2019.
Cette page est générée par un composant COM+ développé en Visual FoxPro 9.0-SP2-HF3