Bonjour,

Voila je rencontre un petit problème avec mon code.

Ce que je fais

J'essaye de faire une redirection de mon index.php vers ma page closed.php de 23:30 à 07:30 du matin mais malheureusement ça ne fonctionne pas.

J'ai forcé la variable $heure pour voir si je rentre dans la condition mais il ne se passe rien...

Je ne comprends pas trop :'(

<?php
//$heure = date('H:i:s');
$heure = '23:31:00';
$heure_ouverture = '23:30:00';
$heure_fermeture = '07:30:00';

if($heure >= $heure_ouverture && $heure <= $heure_fermeture) {
  //echo $heure;
  header('Location: /closed.php');
  exit();
}
?>

Un petit coup de pouce s'il vous plaît amis Grafikart :)

merci !

2 réponses


G1.3
Réponse acceptée

Salut

Vu le nombre de format d'heure, PHP ne sait pas comment comparer des heures textuelles de ce genre (de plus, 2 jours différents). Tu peux comparer des DateTime, ce sera plus simple à manipuler. J'ai fais un petit bout de code du genre en 2-2:

$current = (new DateTime())->setTime(23, 55, 00); // Ici il est 23h55, tu peux modifier pour tester. Retire setTime() pour avoir l'heure actuelle une fois testé et approuvé

$closeAt = (new DateTime())->setTime(23, 30, 00);
$openAt = (new DateTime())->setTime(7, 30, 00);

// En fonction du moment de la journée
if ($current > $openAt) {
    $openAt->add(new DateInterval('P1D')); // Prochaine ouverture demain matin
} else {
    $closeAt->sub(new DateInterval('P1D')); // Fermé depuis hier soir
}

// Comparaison de DateTime (easy ;) )
if ($current > $closeAt && $current < $openAt) {
    echo "Closed";
} else {
    echo "Open";
}

Dis moi si tu as besoin d'explications en plus ;)

ça me semble parfait, tu gères je n'aurai pas pensé une seule seconde que c'était les formats textuels des daites qui pouvaient venir faire planter le système !

Merci beaucoup !