Page 1 sur 1

Lister des créneaux horaires : boucle for() ? ou autre ?

Posté : 04 sept. 2008, 13:15
par Bisvan
Bonjour,

Je dois faire un affichage de créneau horaire.
J'ai une heure d'ouverture $heure1 et une heure de fermeture $heure2

J'aimerai afficher une liste de créneau horaire toutes les 20mn

Exemple : $heure1=11:00 et $heure2=14:00
J'aimerais afficher avec une boucle :
11:00
11:20
11:40
12:00
12:20
12:40
13:00
13:20
13:40
14:00

mais je bloque complet avec ma boucle for() :? et je ne sais pas comment faire une boucle mais avec des données "time" qui vont jusqu'à 60 et non 100 (pour les minutes).

Auriez vous des idées ?

Merci beaucoup :)

Posté : 04 sept. 2008, 13:20
par Invité
$heure_depart=10;
$heure_fin=14;
for ($i=$heure_depart;i<=$heure_fin;$i++) {
	for ($j=0;$j=<40;$j+=20) {
		echo $i.":".$j;
	}
}

Posté : 04 sept. 2008, 13:30
par Bisvan
Super merci beaucoup.

Je corrige juste deux chtites erreurs dans ta soluce pour ceux que ça intéresserait :

(il manquait un "$" et le <= de $j était inversé)
$heure_depart=10;
$heure_fin=14; 
for ($i=$hheure_depart;$i<=$heure_fin;$i++) {
for ($j=0;$j<=40;$j+=20) {
echo $i.":".$j;
echo "<BR>";
}
} 

Sinon une idée pour que chaque premier résultat d'une heure s'affiche avec deux zéros et non un :
Exemple : 11:00 au lieu de 11:0 ?

Posté : 04 sept. 2008, 13:44
par Sékiltoyai
str_pad()

Posté : 04 sept. 2008, 14:00
par Bisvan
Oui j'y avais pensé mais en fait cela concerne que le premier créneau de chaque heure. je pensais qu'on pouvait peut être formaté une valeur dans la boucle for()...
Mais finalement j'ai fait une "bidouille" et rajouté un if($j="0"){$j="00"}

Merci :)

Posté : 04 sept. 2008, 14:03
par doctorrock
printf("%02d",$val);
?

C'est drôle comme les gens utilisent plein de str_** avec des echos, alors que printf sait tout faire :lol:

Sinon je propose
$d = new DateTime();
while ($d->format('H') != $heure_fin) {
    $d->modify("+20min");
    echo $d->format('H\hi');
}

Posté : 04 sept. 2008, 14:56
par Bisvan
Merci pour ta solution mais il faudrait que l'heure de début soit aussi une variable (que j'extrais d'une bdd) alors que tu fais un datetime (j'ai besoin d'afficher les créneaux même en dehors des heures prévues).

Quelqu'un aurait il oune idée ?

Posté : 07 sept. 2008, 15:49
par Bisvan
Voilà en glanant par ci par là j'ai réussi à trouver la solution à mon problème.
Pour ceux que ça intéresse :
function horaires($hd,$hf,$gap){
    $hhd=substr($hd,0,2);$mmd=substr($hd,2);
    $hhf=substr($hf,0,2);$mmf=substr($hf,2);
    $deb=mktime($hhd,$mmd);
    $fin=mktime($hhf,$mmf);
    while($deb <= $fin){
        echo date('H:i',$deb).'<br />';
        $deb=strtotime("+$gap minutes",$deb);
        }
    }
horaires('0830','1130',30);

Posté : 07 sept. 2008, 23:13
par sadeq
Enrichissement :
<?php
$heure_debut = "10:00";
$heure_fin = "14:00";
$d = new DateTime($heure_debut);
while ($d->format('H:i') <= $heure_fin) {
    echo $d->format('H\hi') . "<br />";
    $d->modify("+20min");
}
?>
Et sous forme de fonction :
<?php
function horaire($heure_debut="00:00", $heure_fin="00:00", $pas=60){
	$horaire = array();
	$d = new DateTime($heure_debut);
	while ($d->format('H:i') <= $heure_fin) {
    	$horaire[] = $d->format('H\hi');
    	$d->modify("+{$pas}min");
	}
	return $horaire;
}
//Appel
$h = horaire("10:00", "14:00", "20");
foreach($h as $valeur) echo $valeur . "<br />";
?>