8768 sujets

Développement web côté serveur, CMS

passent et ne se ressembles pas !
Bonjour,
J'ai essayé de trouver le nom du jour en français dans PHP.
Je reçois une date sous forme JJ MM AA. De cette date, je voudrais retrouver le jour.
J'ai essayé :


	$annee = $_POST["annee"];
	$mois = $_POST["mois"];
	$jour = $_POST["jour"];
	$heure = $_POST["heure"];
	$motif = $_POST["motif"];
	$periode = $_POST["periode"];
	
// On vérifie ...
	echo "On vérifie  ";
	if(!empty($_POST)){
	var_dump($_POST);
	echo "   ça marche   ";
	}
// Et jusque là ça marche 	

	$date = $jour.' '.$mois.' '.$annee;
	$periode = strtoupper($periode);
	$datinv = '20'.$annee.$mois.$jour;

	echo $date.' ';
	echo $datinv.' ';

function WeekDay($datinv)
{
    setlocale(LC_ALL, 'fra','fre','fr_FR','french');
    return strftime('%A', $datinv);
}
	echo WeekDay($datinv);
	die;

Mais rien à faire ! Je reçois bien un nom de jour, mais ce n'est pas le bon. Dans mon exemple, je devrai avoir 'lundi'. Et bien non !

On vérifie array(6) { ["jour"]=> string(2) "30" ["mois"]=> string(2) "10" ["annee"]=> string(2) "23" ["heure"]=> string(2) "10" ["motif"]=> string(12) "Test entrée" ["periode"]=> string(0) "" } ça marche 30 10 23 20231030 dimanche

que je rajoute le siècle à ma date ou pas dans $datinv.
Que n'ais-je pas ou mal compris ?
Merci si quelqu'un peut éclairer ma lanterne.
Salutations cordiales
H.
Bonjour,

Il me semble que strftime est obsolète en php 8.
J'utilise se code pour les dates :
$date_l = new DateTime('2023-10-30');
$dateFormatter = IntlDateFormatter::create(
	Locale::getDefault(),
	IntlDateFormatter::NONE,
	IntlDateFormatter::NONE,
	date_default_timezone_get(),
	IntlDateFormatter::GREGORIAN,
	'EEEE d LLLL yyyy'
  );
echo $dateFormatter->format($date_l); // lundi 30 octobre 2023
Modérateur
Bonjour ,

comme indiqué par phiper, strftime() est obsoléte sur les hébergements en php8x. encore fonctionnelle, elle affichera un warning pas très sexy.

La fonction https://www.php.net/manual/fr/class.intldateformatter.php peut remplacer avantageusement l'approche avec strftime() .

Malgré tout , tu peut voir à servir l'une ou l'autre selon la version de php , exemple pour reprendre les deux approches.
<form method="post">
	<input name="annee" placeholder="annee" type=text>
	<input name="mois" placeholder="mois" type=text>
	<input name="jour" placeholder="jour" type=text>
	<input name="heure" placeholder="heure" type=text>
	<input type=submit>
</form>
<?php
	if(!empty($_POST)){
		$annee = $_POST["annee"];
		$mois = $_POST["mois"];
		$jour = $_POST["jour"];
		$heure = isset($_POST["heure"]) ? '0' : $_POST["heure"] ;// si non rempli	
		
		if (version_compare(PHP_VERSION, '8.0.0', '<')) {
			
			function WeekDay($mois,$jour,$annee,$heure) {
				setlocale(LC_ALL, 'fra','fre','fr_FR','french');
				return strftime('%A',mktime($heure,0,0,$mois,$jour,$annee));
			}			
			echo 'A la date du : "' .$jour.' '.$mois.' '.str_pad($annee,4,'20',STR_PAD_LEFT) .'", le jour de semaine est: '.WeekDay($mois,$jour,$annee,$heure).'<br>';

		}
		else {
			// PHP8x
			$annee=str_pad($annee,4,'20',STR_PAD_LEFT);// on garde la'année sur 4 chiffres
			$date_l = new DateTime($annee.$mois.$jour);
			$dateFormatter = IntlDateFormatter::create(
			Locale::getDefault(),
			IntlDateFormatter::NONE,
			IntlDateFormatter::NONE,
			date_default_timezone_get(),
			IntlDateFormatter::GREGORIAN,
			'EEEE' /* on garde le jour */
			);
			echo 'A la date du : "' .$jour.' '.$mois.' '. $annee  .'", le jour de semaine est: '.$dateFormatter->format($date_l).'<br>';	
		}
	}
?>

La comparaison de version de php peut etre faite avec IntlDateFormatter si tu veut utiliser certaines constantes pré-définies uniquement en php8. Sinon elle est supposée passer partout et strftime() peut être ignorer. Smiley cligne

cdt
Modifié par gcyrillus (30 Oct 2023 - 14:25)
Bonsoir,
Merci de vos conseils éclairés et éclairant.
J'ai déclenché la dll voulue par :

;extension=php_intl.dll

que j'ai décommenté(?) en supprimant le ; dans php.ini, mais ça ne va pas mieux, j'ai toujours cette erreur :

Fatal error: Class 'IntlDateFormatter' not found in C:\WorkSite\EasyPHP-12.1\www\denis\rem\majrem\ins-rem.php on line 60

soit, dans la ligne 60 de ma page, l'instruction :

	$dateFormatter = IntlDateFormatter::create(

je tourne windows 11.
Je cherche encore, et je vous tiens au courant.
H.
En attendant, ce post est considéré comme résolu. La solution viendra de l'installation de EasyPhP.
Cordialement et merci encore
H.
Meilleure solution
Bzhorace a écrit :
Bonsoir,
Merci de vos conseils éclairés et éclairant.
J'ai déclenché la dll voulue par :

;extension=php_intl.dll

que j'ai décommenté(?) en supprimant le ; dans php.ini, mais ça ne va pas mieux, j'ai toujours cette erreur :

Fatal error: Class 'IntlDateFormatter' not found in C:\WorkSite\EasyPHP-12.1\www\denis\rem\majrem\ins-rem.php on line 60

soit, dans la ligne 60 de ma page, l'instruction :

	$dateFormatter = IntlDateFormatter::create(

je tourne windows 11.
Je cherche encore, et je vous tiens au courant.
H.


Tu as relancé ton serveur web après avoir décommenté ?