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

Olive33 -  
 NULL -
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. PhP Messages postés 1774 Statut Membre 606
     
    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. olive33
       
      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
      1. olive33 > olive33
         
        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
  2. PhP Messages postés 1774 Statut Membre 606
     
    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. olive33
       
      Bonjour,

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

      Encore merci,

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