DÉTERMINER SI UNE DATE EST UN JOUR FÉRIÉ

cs_MUSUL Messages postés 7 Date d'inscription vendredi 27 décembre 2002 Statut Membre Dernière intervention 9 mars 2007 - 16 mai 2005 à 13:49
cs_MUSUL Messages postés 7 Date d'inscription vendredi 27 décembre 2002 Statut Membre Dernière intervention 9 mars 2007 - 16 mai 2005 à 14:57
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/18008-determiner-si-une-date-est-un-jour-ferie

cs_MUSUL Messages postés 7 Date d'inscription vendredi 27 décembre 2002 Statut Membre Dernière intervention 9 mars 2007
16 mai 2005 à 14:57
Excusez j'avai pas vu qu'il y avait en plus une erreur au niveau du calcul du lundi de pentecote ainsi qu'un oublie de ma part au niveau des DateOf, voici le code corrigé :

//Fonction qui teste si le jour est férié
function JourFeriee(Date : TDateTime):boolean;
var
Year,Month,Day: Word;
A,b,c,d,e,f,g,h,i,J,k,l,M,n,o: integer;

begin
DecodeDate(Date,Year,Month,Day);
A := Year;

// Module de calcul
l := A mod 19;
b := A div 100;
c := A mod 100;
d := b div 4;
e := b mod 4;
f := (b+8) div 25;
g := (b-f+1) div 3;
h := (19*l+b-d-g+15) mod 30;
i := c div 4;
k := c mod 4;
o := (32+2*e+2*i-h-k) mod 7;
n := (l+11*h+22*o) div 451;
M := (h+o-7*n+114) div 31;
J := (h+o-7*n+114) mod 31+1;

formmain.memo.lines.add(DateToStr(DateOf(EncodeDate(A,M,J) + 50)));

// Retourne vrai si jour actuel = jour férié
Result:=
// Fêtes mobiles
( DateOf(Date) = DateOf(EncodeDate(A,M,J)) ) //Pâques
or ( DateOf(Date) = DateOf(EncodeDate(A,M,J) + 39) ) //Ascension
or ( DateOf(Date) = DateOf(EncodeDate(A,M,J) + 50) ) //Pentecote
// Fêtes fixes
or ( DateOf(Date) = DateOf(EncodeDate(A,12,25)) ) //Noël
or ( DateOf(Date) = DateOf(EncodeDate(A,1,1)) ) //Jour de l'an
or ( DateOf(Date) = DateOf(EncodeDate(A,5,1)) ) //Fête du Travail
or ( DateOf(Date) = DateOf(EncodeDate(A,5,8)) ) //Armistice de la WW2
or ( DateOf(Date) = DateOf(EncodeDate(A,7,14)) ) //Fête Nationale
or ( DateOf(Date) = DateOf(EncodeDate(A,8,15)) ) //Assomption
or ( DateOf(Date) = DateOf(EncodeDate(A,11,1)) ) //Toussaint
or ( DateOf(Date) = DateOf(EncodeDate(A,11,11)) ); //Armistice de la WW1
end;
cs_MUSUL Messages postés 7 Date d'inscription vendredi 27 décembre 2002 Statut Membre Dernière intervention 9 mars 2007
16 mai 2005 à 14:45
code corrigé :
function JourFeriee(Date : TDateTime):boolean;
var
Year,Month,Day: Word;
A,b,c,d,e,f,g,h,i,J,k,l,M,n,o: integer;

begin
DecodeDate(Date,Year,Month,Day);
A := Year;

// module de calcul
l := A mod 19;
b := A div 100;
c := A mod 100;
d := b div 4;
e := b mod 4;
f := (b+8) div 25;
g := (b-f+1) div 3;
h := (19*l+b-d-g+15) mod 30;
i := c div 4;
k := c mod 4;
o := (32+2*e+2*i-h-k) mod 7;
n := (l+11*h+22*o) div 451;
M := (h+o-7*n+114) div 31;
J := (h+o-7*n+114) mod 31+1;

// Informe l'utilisateur d'un éventuel jour férié
Result:=
// Fêtes mobiles
( Date = DateOf(EncodeDate(A,M,J)) ) //Paque
or ( Date = DateOf(EncodeDate(A,M,J) + 39) ) //ascension
or ( Date = DateOf(EncodeDate(A,M,J) + 49) ) //Pentecote
// Fêtes fixes
or ( Date = DateOf(EncodeDate(A,12,25)) ) //noel
or ( Date = DateOf(EncodeDate(A,1,1)) ) //an
or ( Date = DateOf(EncodeDate(A,5,1)) ) //travail
or ( Date = DateOf(EncodeDate(A,5,8)) ) //Armistice de la WW2
or ( Date = DateOf(EncodeDate(A,7,14)) ) //Fête Nationale
or ( Date = DateOf(EncodeDate(A,8,15)) ) //Assomption
or ( Date = DateOf(EncodeDate(A,11,1)) ) //Toussaint
or ( Date = DateOf(EncodeDate(A,11,11)) ); //Armistice de la WW1
end;
cs_MUSUL Messages postés 7 Date d'inscription vendredi 27 décembre 2002 Statut Membre Dernière intervention 9 mars 2007
16 mai 2005 à 13:49
Euh... Dîtes votre code là y marche que pour 2004 ou je rêve ?
nan pasque pour 2005 c carrement pas ça ^^;
selon lui les jours fériès mobiles sont
paque : 03/03/2005
ascension : 11/04/2005
pentecote : 21/04/2005
or je vous fais remarquer que les vrais dates sont :
paque : 27/03/2005
ascension : 05/05/2005
pentecote : 15/05/2005
Donc un code pas très utiles en l'état actuel des choses.
Rejoignez-nous