Page 1 sur 1

afficher des heures avec un zero devant

Posté : 22 nov. 2006, 01:24
par Moker
bonsoir,

je desire tester l'egalité entre la variable $_POST["heureDebut"] du script suivant, et une sous-chaine stocké dans $heureDebut.

or, $heureDebut etant une sous-chaine, 8h est stocker sous la forme 08:00, et $_POST["heureDebut"] comme ceci 8:00, l'egalité n'est donc pas vrai :(

comment puis-je parer à ce probleme ?
<select name="heureDebut">
<?php
for($heure=06;$heure<=22;$heure++)
{
	$minutes = array("00","30");
	foreach($minutes as $cle => $demiHeure)
	{
		echo "<option value=\"".$heure.":".$demiHeure."\" ".($heureDebut==$heure.":".$demiHeure?"SELECTED":null).">".$heure.":".$demiHeure."</option>";
	}
}
?>
</select>
merci à vous !

Posté : 22 nov. 2006, 01:35
par Truc
Salut,

En concaténant ce qu'il manque, c'est à dire le "0" à la variable $_POST["heureDebut"].

Posté : 22 nov. 2006, 01:36
par Ajoloca
Bonsoir,

Si je comprends bien ton PB c'est d'avoir les heures sur deux caractères
Essaie QQ chose du style
<?php
	for($i = 6; $i <= 22; $i++){
		echo $heure = ($i < 10 ? '0' . $i : $i);
	}
?>
Pour le reste à toi de l'adapter en fonction de tes besoins
EDIT : C'est quoi votre carburant ?

Posté : 22 nov. 2006, 01:48
par Truc
EDIT : C'est quoi votre carburant ?
La vue des [Résolu] rapides :lol:

Posté : 22 nov. 2006, 03:14
par Ajoloca
Re,

J'ai regardé le code plus en détail, je ne suis pas sur qu'il face ce à quoi tu t'attends.
Ceci serait plus proche
<select name="heureDebut">
<?php
	// Ligne à supprimer ( elle sert aux tests)
	$heureDebut = '08:30';
	/*
	** Définition des variables
	*/
	// Heure de départ
	$start = 6;
	
	// Heure de fin
	$end = 22;
	
	// Définit les intervales
		// Pour afficher les options par 1/4 d'heure
		// il suffit de modifier le tableau comme ceci 
		// $interval = Array('00', '15', '30', '45'); Sana toucher au reste du code
	$interval = Array('00', '30');
	
	// La ligne suivante permet d'avoir autant d'intervales que souhaités (en fonction de $interval
	$repeter = count($interval);
	/*
	** Coeur du PGM
	*/
	// Calcul de l'heure
   for($i = $start; $i <= $end; $i++){
   	// Ajout des intervales (choix)
		for($j = 0; $j < $repeter; $j++){
			$heure = ($i < 10 ? '0' . $i : $i) . ':' . $interval[$j];
			echo '<option value="' . $heure . '"' . ($heure == $heureDebut ? ' selected="selected" ' : ' ') . '>' . $heure . "</option>\n";
		} 
	}
?>
</select>

Posté : 22 nov. 2006, 08:42
par Ryle
A priori, si le problème ne se pose que pour le premier '0' de la chaine, un simple test sur la longueur de la chaine devrait suffir :
if(strlen($heure) < 2) 
  $heure = '0' . $heure;
on peut éventuellement le faire également avec str_pad(), mais quand on connait la taille initiale, c'est pas vraiment interessant :)

Posté : 22 nov. 2006, 13:24
par Ajoloca
Bonjour,

C'est un choix, perso je n'aime pas mélanger les types (int - chaîne).

Il écrit
for($heure=06;$heure<=22;$heure++)
Ce qui me fais croire qu'il estime avoir '06'.

Posté : 22 nov. 2006, 14:46
par Moker
woaw merci à tous :wink:

je me permet d'utiliser ton code Ajoloca, je n'aurait jamais reussit à coder ca aussi proprement.

merci aussi à toute la comunauté c'est grace à vous que j'ai apprit le php, vos explications sont trés claire, c'est ce qui m'as permit d'avancer dans le developpement !

longue vie à phpfrance :love5:

Posté : 22 nov. 2006, 14:58
par Ajoloca
Bonjour,

Pas de PB pour la réutilisation,c'est fait pour, même si c'était pas mon but premier.
Je voulai te donner à comprendre qu'il faut une grande pratique pour jongler avec les types dans un language faiblement typé comme PHP et aussi qu'il faut coder en pensant aux évolutions métier, voir à la réutilisation du code.