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
Configuration: Windows 2000
Firefox 2.0.0.14

4 réponses

  1. 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
    1. 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
    2. @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
      0
  2. 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
    1. Bonjour,

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

      Encore merci,

      A+ Olive33
      0
    2. 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
  3. 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
    1. Pas impossible en effet, je l'avais trouvé via Google. Merci donc pour cette bonne base de travail :-)
      0