QR 57 – Calculer une durée au-delà de minuit

Ceux qui ont lu la fiche Astuce n°87 sauront sans doute répondre à cette question de Michel M :

Bonjour, une rubrique doit me calculer le temps passé à une tâche à partir de deux champs :  heure de fin – heure début.
Le problème est que certaine de mes tâches commencent à 23h et se termine à 03h le lendemain.
Pour le moment, mon heure de fin, dans ce cas de figure, doit être entrée sous la forme 27 ( 24 (minuit) + 3 (heure du matin) )  afin de me donner un résultat cohérent .
Avez-vous une formule qui me permette de mettre 3 en toute logique dans ma rubrique heure de fin.
Merci pour la solution
Faut-il y associer une date ?

On n’est pas obligé d’y associer une date.

Mais, comme le suggère Michel M, il faut tenir compte du changement de jour lorsque l’heure de fin se trouve après minuit.

On a donc deux situations.

L’heure de fin se trouve dans la même journée que l’heure de début. Elle est donc supérieure à l’heure de début.

L’heure de fin se trouve dans la journée suivante. Elle est alors inférieure à l’heure de début.

Il faut donc tenir compte de ces deux situations pour le calcul d’une rubrique Durée à partir des rubriques HeureDebut et HeureFin.

On le fait grâce à une condition, que l’on pose avec la fonction Si ( Test ; Résultat1 ; Résultat2 )  :

Si (HeureFin < HeureDebut ;

Lorsque cette condition est remplie, il faut ajouter 24 h à l’heure de fin. Mais attention, FileMaker calcule en secondes. Il faut donc poser ces 24 h en secondes et non en heures. Ce qui fait 86 400. Le calcul de la durée est donc :

(HeureFin + 86400) – HeureDebut

On place ici des parenthèses pour faciliter la lecture humaine. FileMaker n’en a pas besoin.

Si la condition HeureFin < HeureDebut n’est pas remplie, alors le calcul se fait le plus simplement du monde :

HeureFin – HeureDebut

Notre calcul complet est alors :

Durée =

Si (
HeureFin < HeureDebut ;
(HeureFin + 86400) – HeureDebut ;
HeureFin – HeureDebut
)

Michel Lansard

Tags: , ,

Merci de laisser un commentaire (déjà 3 commentaires )

Désolé, les commentaires des articles réservés sont eux-mêmes réservés


  1. jcm38
    9 ans ago

    Bonjour

    « L’heure de fin se trouve dans la journée suivante. Elle est alors inférieure à l’heure de début. »

    Ne peut-elle pas être supérieure dans le cas d’une durée de 13 h à cheval sur minuit ?
    ex : HD=22h pour finir le lendemain à HF=23h
    Dans ce cas HF > HD, et ne doit pas retourner 1h mais 13h.
    Bon d’accord, ça fait une longue journée, mais c’est possible.

    JCM


  2. Michel Lansard
    9 ans ago

    @JCM

    Oui c’est vrai les situations peuvent être plus diversifiées, et il faut à chaque fois tenir compte du contexte. Cela sera différent pour certains processus actifs sur plusieurs jours, indépendamment des heures de travail des humains 😉

    Là nous sommes restés dans la situation de la question. Et l’intérêt était surtout de dire qu’il faut faire les ajouts (ou retraits) en secondes et non en heures… 😉
     
    Michel Lansard


  3. jcm38
    9 ans ago

    @Michel
    Très juste concernant les process de plusieurs jours ! (ça doit être pour les machines ou les triathlètes)
    Merci pour cette réponse qui montre aussi qu’il est important de bien définir le ou les contextes possibles avant calculs.
    JCM