Christophe Le Bot

  • Navigation rapide
Pratique de la conception numérique

Derniers commentaires

  • Test d’interface : paiement d’amendes en ligne
    • julienne | J’ai payé ce une contravention sur le cite dédié à cela ,je n’ai pas eu mon justificatif d paiement je suis inquiète car la semaine prochaine je serai dans la semaine ou je...
    • loren | L’algorithme surpuissant imaginé par les grands cerveaux de cette administration élimine la 5eme case lorsque les 3 premiers chiffres entrés par le citoyen verbalisé sont égaux. Pour...
  • Ajouter un disque à un serveur Linux Debian
    • nicolasg | Bonjour, Je réponds un peu tard à bosco Il est possible d’ajouter le deuxième disque comme un disque normal, et de faire un montage LVM (LVM : logic volume manaaer) avec les deux...
  • Récupérer le dernier auto-incrément MySQL avec PHP
    • chanteur06 | salut , une question : comment je remplace ça svp? >> $id_resto_tmp = mysql_insert_id(); mysql_query(‘INSERT INTO users_restos SET id_user=\ ».$_SE...
    • franky | Je pense que c’est ton commit qui n’est pas bon… relis le code de la fin de l’article… A+ utile plus de 5 ans après…
 

Archives de la catégorie
Développement web

Formatage d’une durée avec PHP

PHP regorge de fonctions et de variables pour gérer le temps. Pourtant, quand on souhaite afficher une durée entre deux dates, il n’y a aucune fonction spécifique ! Voici comment s’en sortir.

Un peu de mathématiques

Le principe est d’utiliser un nombre entier, par exemple une durée exprimée en secondes. A vous de convertir la durée avec vos scripts PHP (la fonction mktime() est toute désignée).

Ensuite, quelques formules mathématiques simples donnent un tableau contenant toutes les valeurs de la durée dans les unités de temps que vous souhaitez utiliser :

$duration = 3695;

// Initialisation
$duration = abs($duration);
$converted_duration = array();

// Conversion en semaines
$converted_duration['weeks']['abs'] = floor($duration / (60*60*24*7));
$modulus = $duration % (60*60*24*7);

// Conversion en jours
$converted_duration['days']['abs'] = floor($duration / (60*60*24));
$converted_duration['days']['rel'] = floor($modulus / (60*60*24));
$modulus = $modulus % (60*60*24);

// Conversion en heures
$converted_duration['hours']['abs'] = floor($duration / (60*60));
$converted_duration['hours']['rel'] = floor($modulus / (60*60));
$modulus = $modulus % (60*60);

// Conversion en minutes
$converted_duration['minutes']['abs'] = floor($duration / 60);
$converted_duration['minutes']['rel'] = floor($modulus / 60);
$modulus = $modulus % 60;

// Conversion en secondes
$converted_duration['seconds']['abs'] = $duration;
$converted_duration['seconds']['rel'] = $modulus;

// Affichage
print_r( $converted_duration);

Ce code affichera le résultat suivant :

Array
   (
      [weeks] => Array
         (
            [abs] => 0
         )

      [days] => Array
         (
            [abs] => 0
            [rel] => 0
         )

      [hours] => Array
        (
            [abs] => 1
            [rel] => 1
         )

      [minutes] => Array
         (
            [abs] => 61
            [rel] => 1
         )

      [seconds] => Array
         (
            [abs] => 3695
            [rel] => 35
         )
   )

Vous obtenez un tableau avec le nombre de semaines, de jours, d’heures, de minutes et de secondes que vous pouvez ensuite utiliser pour l’affichage. Pour chaque unité de temps, la cellule [abs] du tableau stocke la durée totale, alors que la cellule [rel] stocke la durée restante (définie par le modulo).

Prendre la valeur absolue de la durée est capitale ! En effet, sans abs(), la fonction floor() donnera des résultats faux avec un durée négative. C’est logique puisqu’elle retourne toujours l’entier inférieur d’un nombre réel. Si la durée vaut +4.4, vous obtenez +4. Si la durée vaut -4.4, vous obtenez -5 !

Et si j’utilise une base de données ?

Si vos dates à comparer viennent d’une base de données, la conversion en timestamp peut se faire directement dans la requête SQL. Avec MySQL, les champs de type DATE, DATETIME ou TIME sont convertis par la fonction UNIX_TIMESTAMP(). Au passage, attention à la limite des champs TIME (de ‘-838:59:59′ à ’838:59:59′) !

Si vous utilisez MySQL 5, la fonction TIMESTAMPDIFF() fera tout à votre place… sauf le formatage en PHP que je vous propose !

En guise de conclusion, consultez les pages PHP et MySQL concernant les fonctions de dates et d’heures qui vous épargneront des calculs inutiles :

Site web : les bonnes pratiques

Même si vous avez dans l’idée de créer LE site web qui va révolutionner les usages d’internet, il n’est pas inutile de rappeler (ou de découvrir…) les bonnes pratiques qui viennent de l’expérience et de l’expérimentation. C’est ce que vous propose la société Temesis avec son projet Opquast.

Quand vous maîtriserez les 153 fiches Opquast, vous aurez sûrement plus de chances de valoriser votre projet web !