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

Eléphant du PHP | 136 Messages

04 sept. 2008, 13:15

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 :)
Bisvan :)

Invité
Invité n'ayant pas de compte PHPfrance

04 sept. 2008, 13:20

$heure_depart=10;
$heure_fin=14;
for ($i=$heure_depart;i<=$heure_fin;$i++) {
	for ($j=0;$j=<40;$j+=20) {
		echo $i.":".$j;
	}
}

Eléphant du PHP | 136 Messages

04 sept. 2008, 13:30

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 ?
Bisvan :)

ViPHP
ViPHP | 5924 Messages

04 sept. 2008, 13:44

str_pad()

Eléphant du PHP | 136 Messages

04 sept. 2008, 14:00

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 :)
Bisvan :)

Eléphanteau du PHP | 36 Messages

04 sept. 2008, 14:03

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');
}
Julien Pauli - Formateur pôle PHP ZendFramework chez Anaska
Contributeur au projet Zend Framework
Ma page de tutoriaux, mon blog

Eléphant du PHP | 136 Messages

04 sept. 2008, 14:56

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 ?
Bisvan :)

Eléphant du PHP | 136 Messages

07 sept. 2008, 15:49

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);
Bisvan :)

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

07 sept. 2008, 23:13

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 />";
?>
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène