Curiosités mathématiques/Trouver le jour de la semaine avec une date donnée

Un livre de Wikilivres.
Sauter à la navigation Sauter à la recherche

Cette page donne plusieurs méthodes de calcul pour savoir le jour de la semaine pour une date donnée dans le calendrier grégorien. Le calendrier grégorien adopté au XVIe siècle succède au calendrier Julien, en modifiant la règle pour déterminer quelle année est bissextile.

La date d'adoption du calendrier varie selon le pays. Ces méthodes de calcul sont valables pour les dates à partir du 1er novembre 1582.

Méthode 1[modifier | modifier le wikicode]

Il y a une méthode plus simple que celles décrites ci-dessous pour trouver le jour d'une date.

C'est d'après l'Algorithme de Mike Keith[1] (dont est inspirée la Méthode 2)

Dans un article publié en 1990 dans le Journal of Recrational Mathematics, Vol. 22, No. 4, 1990, p. 280, Mike Keith propose un algorithme pour la détermination du jour de la semaine correspondant à une date quelconque. Sa formule est inspirée de la congruence de Zeller.

Mike Keith déclare lui-même qu'il s'agit là de la « plus simple formule possible » pour le calcul du jour de la semaine, « la meilleure qui puisse être construite », ajoute-t-il.

Dans sa forme opérationnelle, son algorithme s'écrit :


Jour de semaine : si m >= 3, D = { [(23m)/9] + d + 4 + y + [z/4] - [z/100] + [z/400] - 2 } mod 7

si m < 3, D = { [(23m)/9] + d + 4 + y + [z/4] - [z/100] + [z/400] } mod 7


Comme Mike Keith est un mathématicien américain, D = Day pour Jour ; M = Month pour Mois et Y = Year pour Année

Pour l'explication de la division par 100 et par 400, c'est pour savoir si l'année est bissextile :

Si Y n'est pas divisible par 4, l'année n'est pas bissextile.

Si Y est divisible par 4, l'année est bissextile sauf si A est divisible par 100 et pas par 400.

D = Jour de semaine (D = 0 à 6; 0 = Dimanche, 1 = Lundi, ... , 6 = Samedi)

[x] signifie le nombre entier résultant de la division, le reste étant ignoré

m = Mois (m = 1 à 12; 1 = Janvier, 2 = Février, 3 = Mars, ... , 12 = Décembre) m >= 3 signifie m supérieur ou égal à 3

d = Jour (d = 1 à 31)

y = année

z = y - 1 si m < 3

z = y si m >= 3

Modulo 7 ou mod 7 = reste de la division par 7


Exemples :

1er cas : m < 3

Quel jour de la semaine tombait le 18 janvier 1953 ?

d = 18, m = 1, y = 1953 et z = y-1 = 1952; d'où :

D = { [(23x1)/9] + 18 + 4 + 1953 + [1952/4] - [1952/100] + [1952/400] } mod 7

D = (2 + 18 + 4 + 1953 + 488 - 19 + 4) mod 7

D = 2450 mod 7 = 0 car 2450 = 7 x 350 + 0

18 janvier 1953 = un Dimanche


2eme cas : m > 3

Quel jour de la semaine tombait le 2 août 1953 ?

d = 2, m = 8, y = 1953 et z = y = 1953; d'où :

D = { [(23x8)/9] + 2 + 4 + 1953 + [1953/4] - [1953/100] + [1953/400] - 2 } mod 7

D = (20 + 2 + 4 + 1953 + 488 - 19 + 4 - 2) mod 7

D = 2450 mod 7 = 0 car 2450 = 7 x 350 + 0

2 août 1953 = un Dimanche


3eme cas : m = 3

Quel jour de la semaine tombait le 13 mars 1998 ?

d = 13, m = 3, y = 1998 et z = y = 1998; d'où :

D = { [(23x3)/9] + 13 + 4 + 1998 + [1998/4] - [1998/100] + [1998/400] - 2 } mod 7

D = (7 + 13 + 4 + 1998 + 499 - 19 + 4 - 2) mod 7

D = 2504 mod 7 = 5 car 2504 = 7 x 357 + 5

13 mars 1998 = un Vendredi 13 !


Au besoin, le lecteur pourrait vérifier ses résultats de calcul du jour de la semaine au moyen de notre Calendrier pratique, du Calendrier permanent ou du Calendrier perpétuel à 12 mois.


Méthode 2[modifier | modifier le wikicode]

Pour une date de la forme jour/mois/année où "jour" prend une valeur de 01 à 31, "mois" de 01 à 12 et "année" de 1583 à 9999, utiliser la formule :

c = (14 - mois)/12

En fait, c = 1 pour janvier et février, c = 0 pour les autres mois.

a = année - c

m = mois + 12*c - 2

j = ( jour + a + a/4 - a/100 + a/400 + (31*m)/12 ) mod 7

La réponse obtenue pour j correspond alors à un jour de la semaine suivant :

0 = dimanche, 1 = lundi, 2 = mardi, etc.

Remarques[modifier | modifier le wikicode]

Dans toutes les divisions "/", on ne garde que la partie entière du résultat. Par exemple, 35/4= 8.

Enfin, mod 7 signifie "modulo la division par 7", c'est-à-dire "le résultat est le reste de la division par 7".

(Par exemple, 23 mod 7 = 2, car le reste est 2.)

Exemple[modifier | modifier le wikicode]

Sur quel jour de la semaine tombe le 13 mars 2004 ?

On calcule c, a et m :

c = (14 - 3)/12 = 0, a = 2004 - 0 = 2004 et m = 3 + 12*0 - 2 = 1.

On trouve alors :

j = ( 13 + 2004 + 2004/4 - 2004/100 + 2004/400 + (31*1)/12 ) mod 7

j = ( 13 + 2004 + 501 - 20 + 5 + 2 ) mod 7

j = 2505 mod 7 = 6 (car 2505/7 = 357 et il reste 6.)

Donc le 13 mars 2004 était un samedi.

Méthode 3[modifier | modifier le wikicode]

En Italique, calcul du jour de la semaine de l'exemple 1er août 1947.

  1. On garde les deux derniers chiffres de l'année en question; (1947 => 47)
  2. On ajoute 1/4 de ce chiffre en ignorant les restes; (47/4 = 11, reste 3 ignoré)
  3. On ajoute la journée du mois; (dans ce cas => 1)
  4. Selon le mois on ajoute
    Janvier = 0
    Février = 3
    Mars = 3
    Avril = 6
    Mai = 1 (= Ma1)
    Juin = 4
    Juillet = 6 (= 6uillet)
    Août = 2
    Septembre = 5 (= 5eptembre)
    Octobre = 0 (= 0ctobre)
    Novembre = 3
    Décembre = 5
    Entre parenthèse, des astuces pour se rappeler de cette correspondance.
  5. Si l'année est bissextile et le mois est janvier ou février, on ôte 1 , (1947 =>année non bissextile)
  6. Selon le siècle, on ajoute : (19** => 0)
    Années 1600 = 6;
    Années 1700 = 4;
    Années 1800 = 2;
    Années 1900 = 0;
    Années 2000 = 6;
    Années 2100 = 4;
  7. On divise la somme par 7 et on garde le reste; (47 + 11 + 1 + 2 - 0 + 0 = 61; 61 divisé par 7 = 8, reste 5)
  8. Le reste représente le jour de la semaine recherché: (Le 1er août 1947 était un vendredi)
    0 pour Dimanche,
    1 pour Lundi,
    2 pour Mardi,
    3 pour Mercredi,
    4 pour Jeudi,
    5 pour Vendredi,
    6 pour Samedi.

De plus, on peut soustraire 28, 56 ou 84 à l'année, dès le départ, cela ne change pas le résultat.

Exemple : (19 + 4 + 1 + 2 - 0 + 0 = 26; 26 divisé par 7 = 3, reste 5). C'est un peu plus simple à faire de tête.

Avec ce qui précède, il est facile de calculer de tête le jour de la semaine correspondant à une date donnée.

Méthode 4[modifier | modifier le wikicode]

Cette méthode de calcul utilise la table suivante :

Valeur Année Mois (a) Mois (b) Jour Jour de la semaine
1 2 3 4 5 6 7 8
000  00  1 7 18   5 10 7 14 21 28 Lundi
+ 300  40  2 *   8 13 19 8 5 1 8 15 22 29 Mardi
 80  3 14 2 3 11 2 8 2 9 16 23 30 Mercredi
+ 200 *   4 9 15 6 3 11 3 10 17 24 31 Jeudi
 20  10 * 16 9 12 6 4 11 18 25 Vendredi
+ 100  60  *   0 5 11 4 7 9 12 5 12 19 26 Samedi
6 * 12 17 1 10 1 4   7   6 13 20 27 Dimanche

Utilisation[modifier | modifier le wikicode]

Une valeur de 0 à 6 (Colonne 1 : valeur) est attribuée à chaque ligne de la table. Dans cette méthode, on calcule la somme des valeurs des lignes sélectionnées à chacune des étapes suivantes (ex: 15/12/1957) :

  1. (Colonne 2) Prendre la valeur de la ligne correspondant au siècle modulo 4 (000, 100, 200 ou 300) (ex: 1957 -> 300, V = 1),
  2. (Colonne 3) Ajouter la valeur de la ligne correspondant à la vingtaine de l'année (ex: 1957 -> 40, V + 1 = 2),
  3. (Colonne 4) Ajouter la valeur de la ligne correspondant au reste de la division de l'année par 20 (ex: 1957 -> 17, V + 6 = 8),
  4. Si l'année se termine par 00 et s'il y a un "+" dans la cellule sélectionnée à l'étape 1, ajouter 1 et utiliser la colonne 5 pour le mois (ex: 1957 pas concerné),
  5. Sinon, s'il y a un "*" dans la cellule sélectionnée à l'étape 3, utiliser la colonne 6 pour le mois, sinon la colonne 5 (ex: 1957 pas de "*", colonne 5),
  6. (Colonne 5 ou 6) Ajouter la valeur de la ligne correspondant au numéro du mois (ex: 12, V + 4 = 12),
  7. (Colonne 7) Ajouter la valeur de la ligne correspondant au jour dans le mois (ex: 15, V + 1 = 13),
  8. (Colonne 7) Le jour de la semaine (colonne 8) correspond à la ligne où se trouve le total dans la colonne 7 (ex: 13, Dimanche 15/12/1957).
Valeur Année Mois (a) Mois (b) Jour Jour de la semaine
1 2 3 4 5 6 7 8
000  00  1 7 18   5 10 7 14 21 28 Lundi
+ 300  40  2 *   8 13 19 8 5 1 8 15 22 29 Mardi
 80  3 14 2 3 11 2 8 2 9 16 23 30 Mercredi
+ 200 *   4 9 15 6 3 11 3 10 17 24 31 Jeudi
 20  10 * 16 9 12 6 4 11 18 25 Vendredi
+ 100  60  *   0 5 11 4 7 9 12 5 12 19 26 Samedi
6 * 12 17 1 10 1 4   7   6 13 20 27 Dimanche

Exemple 15/12/1957 :  1 + 1 + 6 + 4 + 1  =  13  : Dimanche

Références[modifier | modifier le wikicode]

  1. http://c2.com/cgi/wiki?PerpetualCalendarAlgorithm

Wikipedia-logo-v2.svg

Wikipédia propose un article sur : « Détermination du jour ».