Donnez vie à vos documents numériques !
 

Addition des heures (hh:mm:ss) égales à 24h00

abracadabraPDF Forums PDF – Général Addition des heures (hh:mm:ss) égales à 24h00

  • Ce sujet est vide.
  • Créateur
    Sujet
  • #45883
    Crevette
    Membre

    Bonjour à toute la communauté,
    Revoilà le sujet des additions d’heures.Je me suis inspiré des nombreuses contributions pour écrire les scripts (voir ci-dessous) qui fonctionnent très bien. Malheureusement, en testant la possibilité d’une durée de 24:00:00 je me suis aperçu que l’addition ne fonctionnait pas. Je peux additionner 23:59:59 mais 24:00:00 impossible. :mur: Je tourne en rond depuis quelques jours. Avez-vous idée qui débloquerait cet obstacle?
    D’avance merci pour vos réponses.

    Voici le script en document

    function Time2Num(sFormat, sTime) {
    /*
    convert time string (sTime) with format of sFormat
    to the seconds since the start of the day
    */
    if(sTime == ”) return ”; // exit
    // get date time for Epoch date and sTime
    var oTime = util.scand(‘mm/dd/yyyy ‘ + sFormat, ’01/01/1970 ‘ + sTime);
    // convert UTC Offset to milliseonds for adjustment
    var fTZOffset = oTime.getTimezoneOffset() * 1000 * 60
    // time since the start of the day in millseconds
    var fTime = oTime.valueOf() – fTZOffset;
    // convert to seconds and return value
    return Math.floor(fTime / 1000);
    }
    Script de calcul

    event.value = ”;

    // Récupération les temps
    var temps1 = this.getField(‘Champs1’).value;
    var temps2 = this.getField(‘Champs2).value;
    // …

    // Conversion des temps de chaînes en nombres (secondes)
    var secondes1 = Time2Num(‘hh:mm:ss’, temps1);
    var secondes2 = Time2Num(‘hh:mm:ss’, temps2);
    // …

    // Somme
    var somme = secondes1+ secondes2; //…

    // Variables
    var fsec = somme ;
    var fMins = somme / 60;
    var fHrs = Math.floor(fMins / 60);

    // Minutes
    fMins = fMins – (fHrs * 60);
    fMins = Math.floor(fMins);

    // Secondes
    fsec = fsec – (fHrs * 3600) – (fMins * 60);
    fsec = Math.floor(fsec);

    // Mise en forme du résultat
    event.value = fHrs + ‘:’ + util.printf(‘%,302.0f’, fMins) + ‘:’ + util.printf(‘%,302.0f’, fsec)
    //

Affichage de 25 réponses de 1 à 25 (sur un total de 40)
  • Auteur
    Réponses
  • #64186
    bebarth
    Maître des clés

    bonjour,
    Il me semble que j’avais travaillé sur ce sujet !
    Essaye d’écrire en script de validation des champs :

    Code:
    if (this.event.target.value == “24:00”) this.event.target.value = “0:00”;

    A tester, mais je pense que ça devrait fonctionner !

    …et pourquoi indiquer 24:00 alors que minuit c’est 0:00 ???

    @+
    :bonjour:

    #64187
    Crevette
    Membre

    Merci pour cette piste mais j’ai  probablement mal exprimé mon projet.

    “…et pourquoi indiquer 24:00 alors que minuit c’est 0:00 ???”
    Il s’agit d’additionner des durées pas des horaires. Je souhaite par exemple : 24:00:00 (champ1) + 01:00:00 (champ2) = 25:00:00 (champ3).
    Cdlt

    #64188
    bebarth
    Maître des clés

    Dans ce post récent, on peut additionner plus de 24 heures…
    https://abracadabrapdf.net/forum/index.php/topic,3362.msg19756.html#msg19756
    @+
    :bonjour:

    #64189
    Crevette
    Membre

    Bonjour bebarth et merci pour ta réponse,
    Malheureusement, dans l’exemple du post cité “calcul h_BB” je n’ai pas réussi a entrer 24:00. Message d’erreur “la valeur indiquée ne correspond pas au format du champ”. J’ai essayé en supprimant le format du champ et du coup le calcul ne se fait plus.
    Je suis dans le brouillard total.
    @bientôt

    #64190
    bebarth
    Maître des clés

    bonjour,
    Je crois que j’ai compris maintenant.
    J’essaye de regarder dans la journée.
    @+ :bonjour:

    #64191
    bebarth
    Maître des clés

    Je t’ai fait rapidement un exemple.
    Ici je créé un masque arbitraire 99:99:99 donc le nombre d’heures maxi pour chaque champ à additionner est 99 h 59 mn 59 s.
    Exemple avec 2 champs, à adapter selon le nombre de champs désirés !
    @+
    :bonjour:

    #64192
    Crevette
    Membre

    Merci Bebarth. J’ai testé avec 24:00:00 + 01:00:00 et le résultat est NaN:NaN:00. Ya un truc mais quoi?

    #64193
    bebarth
    Maître des clés

    …c’est ça de ne pas tester avant de partager !!!
    Il faut juste initialiser la variable v en début de script :

    Code:
    var v = 0;

    …et puis c’est tout !
    @+
    :bonjour:

    #64194
    Merlin
    Maître des clés

    J’ai testé avec 24:00:00 + 01:00:00 et le résultat est NaN:NaN:00. Ya un truc mais quoi ?

    NaN = Not a Number
    :idee:

    #64195
    bebarth
    Maître des clés

    …et NaN NaN ? encore moins a number.
    :geek:

    #64196
    Crevette
    Membre

    Super. Merci bcp. C’est une merveille. Me reste à trouver la solution pour dupliquer ça sur une centaine de champs. Est-ce qu’un script en document ferait l’affaire?

    #64197
    bebarth
    Maître des clés

    oui, mais il faudrait voir le document pour savoir un peu comment sont nommés les champs et adapter le script.
    @+
    :bonjour:

    #64198
    Crevette
    Membre

    Super, voici le formulaire sans le super script que tu m’as conseillé.
    Merci.

    #64199
    bebarth
    Maître des clés

    bonjour,
    Voilà, je t’ai fait un script de document pour le tableau 1.
    Je pense qu’il sera difficile d’en créer un seul pour tous les tableaux. pour cela, il faudrait revoir la dénomination de tous les champs pour définir des noms plus homogènes (et pas un coup le jour au début du nom et un autre coup au milieu, par exemple).
    Il y a donc un script de document pour l’initialisation d’une table pour les jours, et une fonction pour le calcul.
    Tu me dis si tu veux des explications.
    @+
    :bonjour:

    #64200
    Crevette
    Membre

    Bonjour Bebarth,
    Merci beaucoup pour ton aide précieuse. Et bravo pour ta virtuosité!
    Effectivement lors de la création des champs je n’avais pas pensé à une dénomination logique. Je vais regarder de près pour comprendre le fonctionnement des scripts.
    A bientôt

    #64201
    Merlin
    Maître des clés

    je n’avais pas pensé à une dénomination logique.

    Tu devrais commencer par ce tuto : https://www.abracadabrapdf.net/ressources-et-tutos/js-et-formulaires-ressources/duplication-rapide-de-champs-de-formulaire/ :Smiley15:

    #64202
    Crevette
    Membre

    Tu me dis si tu veux des explications.

    Bonjour Bebarth. J’ai suivi mécaniquement ta méthode pour les scripts (fonction Temps 1 premier tableau, fonction temps2 deuxième tableau) et renommé mes champs et ça fonctionne très bien jusqu’à ce que j’arrive aux “totaux” des “totaux”  :Smiley08: ainsi qu’à la durée mini et à la durée moyenne. Là mon incompétence devient trop évidente. Je ne sais pas comment m’y prendre.Encore merci à toi.A bientôt

    #64203
    Crevette
    Membre

    Bonjour,Finalement j’ai réussi les totaux des totaux même si  je ne suis pas certain d’avoir réussi la méthode la plus simple. Bref grâce à ton exemple ça fonctionne.
    En revanche pour les valeurs minis et les moyennes je suis devant un obstacle trop grand.  :Euuuh: Je remets en PJ le fichier modifié.
    A bientôt j’espère

    #64204
    bebarth
    Maître des clés

    bonjour,
    Je t’ai fait les totaux pour le lundi, je te laisse le soin de faire de même pour les autres jours !
    Pour les durées mini et moyennes, faut-il regarder les totaux journaliers ou chaque cellule ???
    Bon weekend.
    @+
    :bonjour:

    #64205
    Crevette
    Membre

    Re
    Merci bcp pour ce nouveau script.
    Effectivement il s’agit pour les mini et les moyennes de partir des totaux journaliers (tableau intitulé “Tab1 + Tab2).
    D’une part, je cherche à mettre en avant la plus petite durée dans la semaine et d’autre part à calculer la durée moyenne sur 7 jours.
    Bon week-end (avec protection solaire et rafraîchissements!)

    #64206
    Merlin
    Maître des clés

    je cherche à mettre en avant la plus petite durée dans la semaine

    Je n’ai pas tout suivi depuis le début mais ça c’est facile à obtenir.
    :Smiley15:

    #64207
    bebarth
    Maître des clés

    bonjour,
    Voici le résultat avec le calcul des minis et moyennes.
    A vérifier si je n’ai pas fait d’erreur…
    @+
    :bonjour:

    #64208
    Crevette
    Membre

    Bonjour. C’est super j’ai adapté le script à mon document et ça fonctionne parfaitement. Je m’interroge juste sur un détail. Lorsque que je fais la moyenne sur 7 jours via ms excel je trouve souvent 1 seconde de plus que dans le doc pdf.
    Encore merci.

    #64209
    bebarth
    Maître des clés

    Dans le calcul des moyennes, la ligne :
    var s=parseInt(adTemps/7);
    utilise la partie entière du quotient.
    Je présume qu’Excel doit arrondir à la seconde la plus proche. Si tu veux faire de même, tu rajoutes ces 3 lignes juste après :
    var l=0; // pour initialiser la variable
    var l=String(s).length; // pour connaître le nombre de chiffres de la partie entière
    var s=(adTemps/7).toPrecision(l); // pour arrondir au nombre de chiffres exact

    et je pense que tu devrais retrouver les mêmes valeurs.
    @+
    :bonjour:

    #64210
    Crevette
    Membre

    C’est génial! Rien à dire tu es vraiment un maître.
    :bravo: :bravo: :bravo: :bravo: :bravo: :bravo: Nous pouvons refermer cette parenthèse des additions d’heures ô combien enrichissante pour moi.
    Merci Bebarth.

Affichage de 25 réponses de 1 à 25 (sur un total de 40)
  • Vous devez être connecté pour répondre à ce sujet.