JOURS FÉRIÉS ET DIMANCHE

gg00xiv Messages postés 656 Date d'inscription mercredi 22 août 2001 Statut Membre Dernière intervention 11 mars 2005 - 13 oct. 2004 à 01:08
Gloops1 Messages postés 314 Date d'inscription vendredi 20 février 2009 Statut Membre Dernière intervention 27 septembre 2023 - 22 avril 2019 à 09:59
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/26760-jours-feries-et-dimanche

Gloops1 Messages postés 314 Date d'inscription vendredi 20 février 2009 Statut Membre Dernière intervention 27 septembre 2023
Modifié le 22 avril 2019 à 10:31
Passer en paramètre DateTime.ToDay plutôt que DateTime.Now.

OK je sors ...
Ikki2504 Messages postés 13 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 26 décembre 2010
10 mai 2010 à 11:15
Merci pour cette source, ça m'a évité de tout me retaper moi-même :-)
D'après mon VDD, le code plante pour Pâques 2013... Et ce que je développe sera obsolète à cette date, donc pas bien grave.
J'ai adapté le return pour mon programme, sinon tout est ok
bouba_zyx Messages postés 2 Date d'inscription lundi 9 février 2004 Statut Membre Dernière intervention 9 décembre 2009
9 déc. 2009 à 17:36
plantage en 2013 pour le lundi de pâques :
DateTime dtMondayPaques = new DateTime(dtDate.Year,intMonthPaques,intDayPaques+1);
à remplacer par :
DateTime dtMondayPaques = new DateTime(dtDate.Year, intMonthPaques, intDayPaques).AddDays(1);

sinon super code...
hirex Messages postés 1 Date d'inscription mardi 12 avril 2005 Statut Membre Dernière intervention 30 juillet 2008
30 juil. 2008 à 17:58
Bonjour,

J'essai d'utiliser le calcul des jours fériés et j'ai un pb avec le Lundi de Paques.
La variable "intDayPaques" est à -8, du coup la ligne Dim dtMondayPaques As New DateTime(dtDate.Year, intMonthPaques, Math.Abs(intDayPaques) - 1) plante.

Quelqu'un a t-il une idée svp.
Merci
quineman Messages postés 72 Date d'inscription jeudi 30 novembre 2000 Statut Membre Dernière intervention 10 novembre 2008
14 sept. 2007 à 16:50
J'ai fait une traduction en VB.net mais il me trouve paque le 08/04/2007 au lieu du 09/04/2007. Ce qui me décale tout le reste...
Vous voyer d'ou ça peut venir ?

Public Function IsWorkingDay(ByVal dtDate As DateTime) As Boolean
Dim bolWorkingDay As Boolean = True
Dim arrDateFerie As Array
arrDateFerie = Array.CreateInstance(GetType(DateTime), 8)
' 01 Janvier
arrDateFerie.SetValue(New DateTime(dtDate.Year, 1, 1), 0)
' 01 Mai
arrDateFerie.SetValue(New DateTime(dtDate.Year, 5, 1), 1)
' 08 Mai
arrDateFerie.SetValue(New DateTime(dtDate.Year, 5, 8), 2)
' 14 Juillet
arrDateFerie.SetValue(New DateTime(dtDate.Year, 7, 14), 3)
' 15 Aout
arrDateFerie.SetValue(New DateTime(dtDate.Year, 8, 15), 4)
' 01 Novembre
arrDateFerie.SetValue(New DateTime(dtDate.Year, 11, 1), 5)
' 11 Novembre
arrDateFerie.SetValue(New DateTime(dtDate.Year, 11, 11), 6)
' Noël
arrDateFerie.SetValue(New DateTime(dtDate.Year, 12, 25), 7)

' Dimanche ou jour férié
If (dtDate.DayOfWeek = DayOfWeek.Sunday) Or Array.BinarySearch(arrDateFerie, dtDate) >= 0 Then bolWorkingDay = False

If bolWorkingDay Then
' Calcul du jour de pâques (algorithme de Oudin (1940))
'Calcul du nombre d'or - 1
Dim intGoldNumber As Integer = CInt(dtDate.Year Mod 19)
' Année divisé par cent
Dim intAnneeDiv100 As Integer = CInt(dtDate.Year / 100)
' intEpacte est = 23 - Epacte (modulo 30)
Dim intEpacte = CInt((intAnneeDiv100 - intAnneeDiv100 / 4 - (8 * intAnneeDiv100 + 13) / 25 + (19 * intGoldNumber) + 15) Mod 30)
'Le nombre de jours à partir du 21 mars pour atteindre la pleine lune Pascale
Dim intDaysEquinoxeToMoonFull As Integer = CInt((intEpacte - (intEpacte / 28) * (1 - (intEpacte / 28) * (29 / (intEpacte + 1)) * ((21 - intGoldNumber) / 11))))
'Jour de la semaine pour la pleine lune Pascale (0=dimanche)
Dim intWeekDayMoonFull As Integer = CInt(((dtDate.Year + dtDate.Year / 4 + intDaysEquinoxeToMoonFull + 2 - intAnneeDiv100 + intAnneeDiv100 / 4) Mod 7))
' Nombre de jours du 21 mars jusqu'au dimanche de ou
' avant la pleine lune Pascale (un nombre entre -6 et 28)
Dim intDaysEquinoxeBeforeFullMoon As Integer = intDaysEquinoxeToMoonFull - intWeekDayMoonFull
' mois de pâques
Dim intMonthPaques As Integer = CInt(3 + (intDaysEquinoxeBeforeFullMoon + 40) / 44)
' jour de pâques
Dim intDayPaques As Integer = CInt(intDaysEquinoxeBeforeFullMoon + 28 - 31 * (intMonthPaques / 4))
' lundi de pâques
Dim dtMondayPaques As DateTime = New DateTime(dtDate.Year, intMonthPaques, intDayPaques + 1)
' Ascension
Dim dtAscension As DateTime = dtMondayPaques.AddDays(38)
'Pentecote
Dim dtMondayPentecote As DateTime = dtMondayPaques.AddDays(49)
If (DateTime.Compare(dtMondayPaques, dtDate) 0) Or (DateTime.Compare(dtAscension, dtDate) 0) Or (DateTime.Compare(dtMondayPentecote, dtDate) = 0) Then
bolWorkingDay = False
Else
bolWorkingDay = True
End If

End If

Return bolWorkingDay

End Function
Yogly Messages postés 1 Date d'inscription jeudi 5 avril 2007 Statut Membre Dernière intervention 5 avril 2007
5 avril 2007 à 12:49
Merci pour ce bout de code ,qu'y ma pérmis d'en faire une version WinDev
fnadaus Messages postés 9 Date d'inscription mardi 3 février 2004 Statut Membre Dernière intervention 11 juillet 2005
11 juil. 2005 à 18:08
Merci pour ce bout de code franchement bien sympatique et utile !
j me suis permis de rajouter le samedi en jour 'non travaillé' ...
gg00xiv Messages postés 656 Date d'inscription mercredi 22 août 2001 Statut Membre Dernière intervention 11 mars 2005 13
13 oct. 2004 à 01:08
Un doute sur le lundi de pancôte :) enfin à vérifier dans le temps...
Rejoignez-nous