Retourner le Nième jour de la période (ex : 3ème lundi d'aout 2010)


Contenu du snippet

    Function GetSpecificalDay(ByVal eDayOfWeek As System.DayOfWeek, ByVal iIterationInMonth As Integer, ByVal dDate As Date) As Date
        'iDayOfWeek             jour de la semaine recherché
        'iIterationInMonth      position du jour dans le mois. ex : 2 pour le 2ème mercredi du mois
        'dDate                  date de recherche, le mois et l'année servent de référence
        '1er du mois/année à charger
        Dim dRef As Date = New Date(dDate.Year, dDate.Month, 1)
        Dim dDif As Date = dRef
        'à laquelle on ajoute le jour recherché
        For i As Int16 = 0 To 6
            dDif = dRef.AddDays(i)
            If dDif.DayOfWeek = eDayOfWeek Then Exit For
        Next
        'on a maintenant le premier jour recherché. exception nombre négatif non-pris en compte
        If iIterationInMonth > 1 Then dDif = dDif.AddDays((iIterationInMonth - 1) * 7)
        'test de valeur MAX (supérieur à 4 ou 5 selon les mois pour la cohérence)
        If Not dDif.Month.Equals(dRef.Month) Then _
            Throw New Exception(String.Format("Erreur d'utilisation de la fonction 'GetSpecificalDay'" & _
                                              ", le mois [M-{0}] ne contient pas {1} [D-{2}].", _
                                              dRef.Month, iIterationInMonth, dDif.DayOfWeek))
        Return dDif
    End Function

Compatibilité : VB 2005, VB 2008, VB.NET 1.x

Disponible dans d'autres langages :

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.