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

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Lister des créneaux horaires : boucle for() ? ou autre ?

par sadeq » 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 />";
?>

par Bisvan » 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);

par Bisvan » 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 ?

par doctorrock » 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');
}

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

par Sékiltoyai » 04 sept. 2008, 13:44

str_pad()

par Bisvan » 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 ?

par Invité » 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;
	}
}

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

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