Salut

Je voudrais avoir votre avis, ai-je réinventé la roue
Existe t il une fonction native de PHP pouvant faire la même chose.
Mon besoin, afficher une date sous forme littérale dans la fourchette 01/01/1900 à 31/12/2050.
Pour la date du 13/04/1956, la date littérale est: vendredi 13 avril 1956 (sûr, c'est ma date de naissance).
J'ai fait de multiples essais à l'aide de fonction native PHP, seulement apparemment on ne peut pas descendre en dessous du 1er janvier 1970.
Donc je me suis fait une fonction que j'ai appeler DateLiteral, voici le code LiteralDate.php
Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
<!-- source internet -->
<!-- le 01/01/1900 soit Lundi 1 Janvier 1900 -->
<!-- le 01/01/2050 soit Samedi 1 Janvier 2050 -->
<!-- d'années bissextiles depuis 1900 jusqu'à 2050 -->
<!-- 1904, 1908, .. ==> .., 2044, 2048 (par intervalle de 4 ans) -->
 
<!--Il y a un 29 février tous les 4 ans, et ce depuis 1582 et l'introduction du calendrier grégorien,
on arrive au décompte de 106 « 29 février ».
Cent six et non 109 car les années 1700, 1800 et 1900 n'ont pas été bissextiles
(les années en ×000 ne sont bissextiles que si elles sont multiples de 400, comme l'an 2000)
 
Depuis l'ajustement du calendrier grégorien (1582),
l'année n'est bissextile (comportant 366 jours) que dans l'un des deux cas suivants:
si l'année est divisible par 4 et non divisible par 100,
si l'année est divisible par 400
(« divisible » signifie que la division donne un nombre entier, sans reste).
-->
<?php
//timestamp unix, impossible d'utiliser des dates précédant le 1er janvier 1970
//***************************************************************************************************************************
function DateLiteral($DateSoumise){
	$NomJours = array(0 => "dimanche",1 => "lundi",2 => "mardi",3 => "mercredi",4 => "jeudi",5 => "vendredi",6 => "samedi");
	$NomMois = array(1 => "janvier",2 => "février",3 => "mars",4 => "avril",5 => "mai",6 => "juin",
					 7 => "juillet",8 => "aout",9 => "septembre",10 => "octobre",11 => "novembre",12 => "decembre");
	list($JourNbr, $Mois, $Annee) = explode('/', $DateSoumise);
	$JourNbr = intval($JourNbr); // convertir un chiffre < 10 (09 ==> 9)
	$Mois = intval($Mois); // (03 ==> 3)
	echo '<br>$JourNbr = '.$JourNbr.',$Mois = '.$Mois.',$Annee = '.$Annee;
	$NbrJours = 0;
	// ajout des jours pour les années entieres soumises (donc année soumise - 1)
	for ($i = 1900; $i < $Annee; $i++) {
		$NbrJours += ($i % 4 == 0 && $i % 100 <> 0) ? 366 : 365; // si la condition est vraie, année bissextile 366 jours, sinon 365
	} 
	// ajout des jours pour les mois entier (donc mois soumis - 1)
	echo '<br>$NbrJours année(s) pleinne(s) = '.$NbrJours;
	for ($i = 1; $i < $Mois; $i++) {
		switch ($i)
		{
			case 2: // mois de février
				$NbrJours += ($Annee % 4 == 0 && $Annee % 100 <> 0 && ($Mois-1) >= 3) ? 29 : 28; // si la condition est vraie, année bissextile
				break;
			case 1: //janvier
			case 3: //mars
			case 5: //mai
			case 7: //juillet
			case 8: //aout
			case 10://octobre et ligne suivante decembre
			case 12: $NbrJours += 31;break; 
			default: $NbrJours += 30;break; //tous les autres mois
		}
	}
	echo '<br>$NbrJours année(s) pleinne(s) et mois plein(s) = '.$NbrJours;
	$NbrJours += $JourNbr; // ajout du nombre de jour du mois non entier de la date soumise
	echo '<br>$NbrJours + $JourNbr, total jours: '.$NbrJours;
	if ($JourNbr>=1 && $Mois>=3 && $Annee>=2000){$NbrJours += 1;}//01/03/2000 // <************ POURQUOI  ********** ????
	$NbrSemaineInt = intdiv($NbrJours, 7);//Nombre de semaines entieres
	echo '<br>$NbrSemaineInt = ' . $NbrSemaineInt;
	$RestNbrj = $NbrJours - ($NbrSemaineInt * 7);//Nombre de jour en semaine non entiere
	echo '<br>$RestNbrj = ' . $RestNbrj . '<br><br>';
	return $NomJours[$RestNbrj] . " " . $JourNbr . " " . $NomMois[$Mois] . " " . $Annee;
}//*********************************************************************************************************
	if (isset($_POST['SoumissionDate']))
	{	
		$LaDate = $_POST['datesoumise'];
		echo 'Pour la date du ' . $LaDate;
		echo '<br />';
		echo 'la date littérale est: ' . DateLiteral($LaDate);
	}
?>
Tous les echos dans la fonction sont provisoires, il ne m’ont servis que pour de-buguer.
J'ai dût ajouter une condition (ligne 55) car j'avais une différence d'une journée à partie de cette date, je n'ai pas réussi à trouver pourquoi.
Dans la réalité pour mon besoin, ce n'est pas l'utilisateur qui fournira la date, c'est pourquoi il n'y a aucune vérification de validité de la date fournis en paramètre.
Pour faire fonctionner la fonction afin de vérifier le fonctionnement, le code EtudeDate.php
Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!DOCTYPE html>
<html lang="fr"> <!-- EtudeDate.php -->
	<head>
		<meta charset="UTF-8">
		<meta name="viewport" content="width=device-width, initial-scale=1.0">
		<title>Etude nom du jour</title>
	</head>
	<body>
		<form method="POST" name="monform" action="LiteralDate.php" target="iframe_a">
			<strong>Entrez votre date sous cette forme</strong>
			<br />(01/01/1900 à 31/12/2050)
			<br /><input type="text" name="datesoumise">
			<input type="submit" name="SoumissionDate" value="Go" />
		</form>
		<br />
		<iframe name="iframe_a" style="height:270px; width:400px;"> <!-- conteneur retour du traitement PHP-->
		</iframe>	
	</body>
</html>
Merci de vos éclaircissement.

Motif de l'édit, correction de la ligne 55 $Annee>=2000 non pas $Annee>=200