Pour celles et ceux qui veulent savoir comment j'en suis arriver aux bons résultats, je vous propose le code complet.
Je tiens à préciser que le language utiliser est le PHP.
Je vous souhaite une bonne lecture en espérant avoir mis assez de commentaire pour comprendre ces suites d'instructions.
if(!empty($_POST['calculer'])) { //Récupération des données. if(!empty($_POST['annee'])) $annee = $_POST['annee']; else $annee = ''; $mois = $_POST['mois']; $date = $_POST['date']; $jour = $_POST['jour']; //Transformation de l'année. if($annee == '') $S = $A = 'search'; else { $S = intval($annee/100); $A = $annee - 100*$S; $Y = _h($A + intval($A/4)); //Cas du changement de calendrier. $Cj = _h(6*$S + 4); $Cg = _h(5*$S + intval($S/4) - 1); $C = _calendrier($date, $mois, $S, $A); } //Transformation des mois des années bissextiles. if($mois == 12) $M = 13; else { $M = _numMonth($mois, _bissextile($annee)); } //Transformation de la date. if($date == 0) $Q = 32; else $Q = _h($date); //Transformation du jour. if($jour == 7) $J = 8; else $J = $jour; //Définition de la recherche. if( _searchIsPossible($S,$A,$M,$Q,$J) ) { if($J == 8)16:10 16/03/2006 {// Nous connaissons donc $C, $Y, $M et $Q. // Si $C = 8, alors ce jour n'existe pas. // Sinon on trouve le jour. if($C == 8) { echo "Ce jour n'existe pas, c'est un jour entre les deux calendriers."; } else { $J = _h($C + $Y + $M + $Q); _jour($J, $date, $mois, $annee); } } else { //Cas ou nous connaissons le jour de la semaine. if($Q == 32) {//Nous cherchons le quantième. if($C != 8) {// Si le calendrier est déterminer $x = $C + $Y + $M; for($i=0 ; $i<7 ; $i++) { $x2 = $x + $i; $x1 = intval($x2 / 7); $x1 *= 7; $x1 += $J; if( $x1 == $x2 ) $Q = $i; } _quantieme($jour, $Q, $mois, $annee); } else {//S'il ne l'est pas, c'est que l'année est 1582, //le mois est décembre. $x = $Cj + $Y + $M; for($i=0 ; $i<7 ; $i++) { $x2 = $x + $i; $x1 = intval($x2 / 7); $x1 *= 7; $x1 += $J; if( $x1 == $x2 ) $Qj = $i; } $x = $Cg + $Y + $M; for($i=0 ; $i<7 ; $i++) { $x2 = $x + $i; $x1 = intval($x2 / 7); $x1 *= 7; $x1 += $J; if( $x1 == $x2 ) $Qg = $i; } _quantieme2($jour, $Qj, $Qg, $mois, $annee); } } else {//Nous connaissons le quantième ET le jour. if($M == 13) {//Nous cherchons le mois. if($C != 8) {//Nous connaissons le calendrier. $x = $C + $Y + $Q; for($i=0 ; $i<7 ; $i++) { $x2 = $x + $i; $x1 = intval($x2 / 7); $x1 *= 7; $x1 += $J; if( $x1 == $x2 ) $M = $i; } _mois($jour, $date, $M, $annee); } else {//C'est l'année 1582. $x = $Cj + $Y + $Q; for($i=0 ; $i<7 ; $i++) { $x2 = $x + $i; $x1 = intval($x2 / 7); $x1 *= 7; $x1 += $J; if( $x1 == $x2 ) $Mj = $i; } $x = $Cg + $Y + $Q; for($i=0 ; $i<7 ; $i++) { $x2 = $x + $i; $x1 = intval($x2 / 7); $x1 *= 7; $x1 += $J; if( $x1 == $x2 ) $Mg = $i; } _mois2($jour, $date, $Mj, $Mg, $annee); } } else {//Nous connaissons le mois ET le quantieme ET le jour. if($S != 'search' && $A != 'search') {//Nous connaissons toutes les informations. $x = _h($C + $Y + $M + $Q); $day = _j($jour); $month = _month($mois); if($x == $J) echo "Le $date $month $annee a bien eu lieu un $day."; else echo "Le $date $month $annee n'est pas un $day."; } else {//Nous cherchons l'annee. if(!empty($_POST['century'])) $S = $_POST['century']; if(!empty($_POST['year'])) $A = $_POST['year']; if($S == 'search' && $A == 'search') { include('cent_year.php'); } else {//Nous connaissons maintenant l'une des deux informations. if($S != 'search') {//Cas du siècle. // Nous allons devoir vérifier les années bissextiles $Cj = _h(6*$S + 4); $Cg = _h(5*$S + intval($S/4) - 1); $Mb = _moisBiss($mois); $C = _calendrier($date, $mois, $S, $A); if($C != 8) {//Cas où S est différent de 15 $x = $C + $Q + $M; for($i=0 ; $i<7 ; $i++) { $x2 = $x + $i; $x1 = intval($x2 / 7); $x1 *= 7; $x1 += $J; if( $x1 == $x2 ) $Y = $i; } if($M != $Mb) { $x = $C + $Q + $Mb; for($i=0 ; $i<7 ; $i++) { $x2 = $x + $i; $x1 = intval($x2 / 7); $x1 *= 7; $x1 += $J; if( $x1 == $x2 ) $Yb = $i; } } else $Yb = 8; _annee($jour, $date, $mois, $S, $Y, $Yb); } else {//Cas où S = 15. //Il faudra donc prendre les bonnes années du calendrier julien de 1500 à 1581. // Vérifier s'il faut prendre l'année 1582. // Puis prendre les bonnes années du calendrier grégorien de 1583 à 1599. $Cj = 3; $Cg = 0; $Mb = _moisBiss($mois); $x = $Cj + $Q + $M; for($i=0 ; $i<7 ; $i++) { $x2 = $x + $i; $x1 = intval($x2 / 7); $x1 *= 7; $x1 += $J; if( $x1 == $x2 ) $Yj = $i; } $x = $Cg + $Q + $M; for($i=0 ; $i<7 ; $i++) { $x2 = $x + $i; $x1 = intval($x2 / 7); $x1 *= 7; $x1 += $J; if( $x1 == $x2 ) $Yg = $i; } if($M != $Mb) { $x = $Cj + $Q + $Mb; for($i=0 ; $i<7 ; $i++) { $x2 = $x + $i; $x1 = intval($x2 / 7); $x1 *= 7; $x1 += $J; if( $x1 == $x2 ) $Yjb = $i; } $x = $Cg + $Q + $Mb; for($i=0 ; $i<7 ; $i++) { $x2 = $x + $i; $x1 = intval($x2 / 7); $x1 *= 7; $x1 += $J; if( $x1 == $x2 ) $Ygb = $i; } } else { $Yjb = 8; $Ygb = 8; } _annee2($jour, $date, $mois, $S, $Yj, $Yjb, $Yg, $Ygb); } } else {//Nous connaissons A. $Y = _h($A + intval($A / 4)); if($A%4 == 0) $Mb = _moisBiss($mois); else $Mb = $M; $x = $Y + $Q + $M; for($i=0 ; $i<7 ; $i++) { $x2 = $x + $i; $x1 = intval($x2 / 7); $x1 *= 7; $x1 += $J; if( $x1 == $x2 ) $C = $i; } if($M != $Mb) { $x = $Y + $Q + $Mb; for($i=0 ; $i<7 ; $i++) { $x2 = $x + $i; $x1 = intval($x2 / 7); $x1 *= 7; $x1 += $J; if( $x1 == $x2 ) $C = $i; } } _siecle($jour, $date, $mois, $C, $A); } } } } } } } else echo "Cette recherche est impossible, il manque trop d'informations."; } function _h($x) { return $x%7; } function _searchIsPossible($S,$A,$M,$Q,$J) { if( ($S=='search' && $A=='search' && $M!=13 && $Q!=36 && $J!=8) || (($S!='search' || $S==0) && ($A!='search' || $A==0) && $M==13 && $Q!=36 && $J!=8) || (($S!='search' || $S==0) && ($A!='search' || $A==0) && $M!=13 && $Q==36 && $J!=8) || (($S!='search' || $S==0) && ($A!='search' || $A==0) && $M!=13 && $Q!=36 && $J==8) || (($S!='search' || $S==0) && ($A!='search' || $A==0) && $M!=13 && $Q!=36 && $J!=8) ) return true; else return false; } function _bissextile($annee) { if($annee != '') { if( ($annee%400 == 0) || ($annee%4 == 0 && ($annee - (intval($annee / 100) * 100)) != 0) ) return true; else return false; } else return false; } function _numMonth($mois, $b) { $num = 0; switch($mois) { case 0 : ; case 9 : $num = 0; break; case 4 : $num = 1; break; case 7 : $num = 2; break; case 1 : ; case 2 : ; case 10: $num = 3; break; case 5 : $num = 4; break; case 8 : ; case 11: $num = 5; break; case 3 : ; case 6 : $num = 6; break; } if($b == true) { if($mois == 0) $num = 6; if($mois == 1) $num = 2; } return $num; } function _moisBiss($mois) { return _numMonth($mois, true); } function _maxDays($m, $b) { $nb = 0; switch($m) { case 0 : $nb = 31; break; case 1 : $nb = 28; break; case 2 : $nb = 31; break; case 3 : $nb = 30; break; case 4 : $nb = 31; break; case 5 : $nb = 30; break; case 6 : $nb = 31; break; case 7 : $nb = 31; break; case 8 : $nb = 30; break; case 9 : $nb = 31; break; case 10 : $nb = 30; break; case 11 : $nb = 31; } if($m == 1 && $b == true) $nb++; return $nb; } function _calendrier($date, $mois, $S, $A) { if($S != 'search' && $A != 'search') {//Cas de l'année complète. $annee = $S * 100 + $A; if($annee > 1582) $C = _h(5*$S + intval($S/4) - 1); else { if($annee < 1582) $C = _h(6 * $S + 4); else { //Cas de l'année 1582. if($mois < 11) $C = _h(6*$S + 4); else { //Cas de décembre 1582 ou recherche du mois. if($mois == 11) { //Cas du mois de décembre. if($date!=0) { //Cas du quantième connu. if($date < 10) $C = _h(6*$S + 4); else { if($date > 19) $C = _h(5*$S + intval($S/4) - 1); else $C = 8; } } else { //Cas de la recheche du quantième. $C = 8; } } else { //Cas de la recherche du mois. //2 cas possibles (Si le mois est connu, $C sera modifier. $C = 8; } } } } } else { if($S != 'search' || $S==0) {//On ne connais pas l'année. if($S < 15) $C = _h(6*$S + 4); else { if($S > 15) $C = _h(5*$S + intval($S/4) - 1); else $C = 8; } } else {//On ne connais pas le siècle. $C = 8; } } return $C; } function _j($x) { switch($x) { case 1 : return 'Lundi'; case 2 : return 'Mardi'; case 3 : return 'Mercredi'; case 4 : return 'Jeudi'; case 5 : return 'Vendredi'; case 6 : return 'Samedi'; case 0 : return 'Dimanche'; } } function _q($x, $m, $b) { $max = _maxDays($m, $b); $quant = ''; for($i=1 ; $i<$max+1 ; $i++) if($i%7 == $x) $quant .= $i.','; $tabQuant = explode(',',$quant); $q=''; for($i=0 ; $i19) ) $month .= ' et Décembre'; return $month; } function _a($S, $Y, $Yb) { $ann = ''; for($i=0 ; $i<100 ; $i++) { if( ($Yb==8 && _h($i + intval($i/4)) == $Y) || ($Yb!=8 && ( ($i%4 != 0 && _h($i + intval($i/4)) == $Y ) || ($i%4==0 && _h($i + intval($i/4)) == $Yb ) ) ) ) { $ann .= (($S * 100) + $i).', '; } } $tabAnnee = explode(',', $ann); $a=''; for($i=0 ; $i 19 && $Y82 == $Yg ) $ann .= (($S * 100) + $i).', '; //Recherche dans le calendrier Grégorien. for($i=83 ; $i<100 ; $i++) { if( ($Ygb==8 && _h($i + intval($i/4)) == $Yg) || ($Ygb!=8 && ( ($i%4 != 0 && _h($i + intval($i/4)) == $Yg ) || ($i%4==0 && _h($i + intval($i/4)) == $Ygb ) ) ) ) { $ann .= (($S * 100) + $i).', '; } } $tabAnnee = explode(',', $ann); $a=''; for($i=0 ; $i 82 || ($A==82 && $mois==11 && $date>19)) { if( ( ($A!=0 || ($A==0 && $i%4!=0 ) ) && _h($i * 5 + intval($i / 4) - 1) == $C ) ||($A==0 && $i%4==0 && _h($i * 5 + intval($i / 4) - 1) == $C) ) //$siecl .= ($i+1).", "; $siecl .= (($i * 100) + $A).", "; } //Calendrier Grégorien. for($i=16 ; $i<30 ; $i++) { if( ( ($A!=0 || ($A==0 && $i%4!=0 ) ) && _h($i * 5 + intval($i / 4) - 1) == $C ) ||($A==0 && $i%4==0 && _h($i * 5 + intval($i / 4) - 1) == $C) ) //$siecl .= ($i+1).", "; $siecl .= (($i * 100) + $A).", "; } $tabSiecle = explode(",",$siecl); if( sizeof($tabSiecle) == 2) $s = $tabSiecle[0]; if( sizeof($tabSiecle) == 3) $s = $tabSiecle[0]." et ".$tabSiecle[1]; if( sizeof($tabSiecle) > 3) { $s=''; for($i=0 ; $i me siècle"; $annees = _a($S, $Y, $Yb); echo "les $day $date $month du $siecle sont les années $annees."; } function _annee2($jour, $date, $mois, $S, $Yj, $Yjb, $Yg, $Ygb) { $day = _j($jour); $month = _month($mois); $siecle = ($S + 1)."me siècle"; $annees = _a2($date, $mois, $S, $Yj, $Yjb, $Yg, $Ygb); echo "les $day $date $month du $siecle sont les années $annees."; } function _siecle($jour, $date, $mois, $C, $A) { $day = _j($jour); $month = _month($mois); $siecles = _s($date, $mois, $C, $A); echo "Les $day $date $month des années $A sont les années $siecles."; }