Php-Convertir un entier sous la forme 01,02..
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
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
Configuration: Windows 2000 Firefox 2.0.0.14
4 réponses
-
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 ...-
-
@olive33En 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
-
-
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 ... ;-) -
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 -
Pas impossible en effet, je l'avais trouvé via Google. Merci donc pour cette bonne base de travail :-)