Php-Convertir un entier sous la forme 01,02..

Fermé
Olive33 - 9 mai 2008 à 23:42
 NULL - 15 juin 2010 à 02:34
Bonjour,

Voilà, j'ai un problème tout bête. Je souhaite établir en PHP un relevé d'heure pour la garde de ma fille. Je rentre l'heure d'arrivée t l'heure de départ et pour calculer le nombre d'heures de garde j'utilise un script php :

function difheure($heuredeb,$heurefin)
{
$hd=explode(":",$heuredeb);
$hf=explode(":",$heurefin);
$hd[0]=(int)($hd[0]);$hd[1]=(int)($hd[1]);$hd[2]=(int)($hd[2]);
$hf[0]=(int)($hf[0]);$hf[1]=(int)($hf[1]);$hf[2]=(int)($hf[2]);
if($hf[2]<$hd[2]){$hf[1]=$hf[1]-1;$hf[2]=$hf[2]+60;}
if($hf[1]<$hd[1]){$hf[0]=$hf[0]-1;$hf[1]=$hf[1]+60;}
if($hf[0]<$hd[0]){$hf[0]=$hf[0]+24;}
return (($hf[0]-$hd[0]).":".($hf[1]-$hd[1]).":".($hf[2]-$hd[2]));
}
$hdeb1="01:00:00";
$hfin1="02:00:00";
$jour1 = difheure($hdeb1,$hfin1);
echo "$jour1";

Jusqu'ici tout va bien sauf que...

Le résultat que j'obtiens dans ce cas est de la forme : 1:0:0 alors que je souhaiterais qu'il s'affiche sous la forme 01:00:00

Je pense que cela vient du fait de l'appel de (int) qui correspond à un nombre entier de la forme 1 à 9 et non 01 à 09. Connaissez-vous un moyen de convertir mes entiers ?

Merci par avance

A+ Olive33

4 réponses

PhP Messages postés 1770 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 606
10 mai 2008 à 11:58
Bjr

Utilise la fonction str_pad() de PHP

https://www.php.net/manual/fr/function.str-pad.php



exemple :

<html>
<head>
</head>
<body>
<?php
// Complète une chaîne par la gauche avec des zéros selon la taille spécifiée
function lpad_zero($chaine,$taille)
{
	return str_pad($chaine,$taille,"0",STR_PAD_LEFT);
}

$a=1;
echo lpad_zero($a,2);
?>

</form>
</body>
</html>
--

PhP  
Il y a 10 types de personnes dans le monde : ceux qui comprennent le binaire et les autres ...
0
Bonjour,

Merci pour ta réponse. Seule ombre au tableau, si le nombre d'heures excède 9h, est-ce que cette solution ne va pas m'écrire 010:00:00 au lieu de 10:00:00 ?

A+ Olive33
0
olive33 > olive33
10 mai 2008 à 19:45
En fait, je pose une question bête car la fonction str_pad permet de limiter le nombre de caractères. En théorie donc, pas de problème après 09:00 on passe bien à 10:00. Le hic, c'est pour les minutes.

Par exemple, pour 13:30:00 - 11:00:00 je veux obtenir : 02:30:00.
- Sans str_pad, j'obtiens 2:30:0
- Avec str pad j'obtiens 02:30:0 (en poussant avec STR_PAD_BOTH je peux même régler le problème des secondes)

Maintenant pour 13:00:00 - 11:00:00 je veux obtenir : 02:00:00
- Là ça se complique car str_pad me règle à gauche, à droite ou au milieu, ça va donc m'afficher un truc du genre 02:0:00. reste donc le problème des minutes...

Merci,

A+ Olive33
0
PhP Messages postés 1770 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 606
10 mai 2008 à 21:06
Oui certe mais je pensais plus à une truc du genre

<?php
// Complète une chaîne par la gauche avec des zéros selon la taille spécifiée
function lpad_zero($chaine,$taille)
{
	return str_pad($chaine,$taille,"0",STR_PAD_LEFT);
}

function difheure($heuredeb,$heurefin) 
{ 
$hd=explode(":",$heuredeb); 
$hf=explode(":",$heurefin); 
$hd[0]=(int)($hd[0]);$hd[1]=(int)($hd[1]);$hd[2]=(int)($hd[2]); 
$hf[0]=(int)($hf[0]);$hf[1]=(int)($hf[1]);$hf[2]=(int)($hf[2]); 
if($hf[2]<$hd[2]){$hf[1]=$hf[1]-1;$hf[2]=$hf[2]+60;} 
if($hf[1]<$hd[1]){$hf[0]=$hf[0]-1;$hf[1]=$hf[1]+60;} 
if($hf[0]<$hd[0]){$hf[0]=$hf[0]+24;} 
return (lpad_zero($hf[0]-$hd[0],2).":".lpad_zero($hf[1]-$hd[1],2).":".lpad_zero($hf[2]-$hd[2],2)); 
} 
$hdeb1="01:00:00"; 
$hfin1="02:00:00"; 
$jour1 = difheure($hdeb1,$hfin1); 
echo $jour1; 
?>


Autre variante en utilisant uniquement sprintf()

<?php
function difheure($heuredeb,$heurefin) 
{ 
$hd=explode(":",$heuredeb); 
$hf=explode(":",$heurefin); 
$hd[0]=(int)($hd[0]);$hd[1]=(int)($hd[1]);$hd[2]=(int)($hd[2]); 
$hf[0]=(int)($hf[0]);$hf[1]=(int)($hf[1]);$hf[2]=(int)($hf[2]); 
if($hf[2]<$hd[2]){$hf[1]=$hf[1]-1;$hf[2]=$hf[2]+60;} 
if($hf[1]<$hd[1]){$hf[0]=$hf[0]-1;$hf[1]=$hf[1]+60;} 
if($hf[0]<$hd[0]){$hf[0]=$hf[0]+24;} 
return sprintf("%02s:%02s:%02s",$hf[0]-$hd[0],$hf[1]-$hd[1],$hf[2]-$hd[2]);
} 
$hdeb1="01:00:00"; 
$hfin1="02:00:00"; 
$jour1 = difheure($hdeb1,$hfin1); 
echo $jour1; 
?>


Think different, think php ... ;-)
0
Bonjour,

Un seul mot : MERCI !!! Ca marche comme je voulais, j'ai utilisé sprintf() plus propre à mon sens.

Encore merci,

A+ Olive33
0
T'es pas mieux de regarder ta montre quand elle arrive et quand elle repart ? Puis tu notes sur un calpin.

Tu verrais peut-être un peu plus ta fille de cette façon.
0
Dis donc, tu l'aurais pas pris sur ASP-PHP mon bout de code par hasard ;)
Alors pourquoi ne pas avoir posé ta question là-bas ?

DB77
0
Pas impossible en effet, je l'avais trouvé via Google. Merci donc pour cette bonne base de travail :-)
0