Code de calcul

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 ; $i 19) )
		$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 ; $i19 && $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 ; $i82 || ($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 ; $ime 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.";
}