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 40 réponses de 1 à 40 (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.

    #64211
    Crevette
    Membre

    Bonjour. Je ne pensais pas revenir si vite. Mais du coup, n’ayant pas bien compris le fonctionnement, je me retrouve coincé pour aller plus loin.
    Sur mon premier projet j’utilisais Time2Num et c’était assez simple de créer un pop-up alerte simple pour les totaux calculés supérieurs à 24h00. Mais là je suis dans le brouillard. Comment faire?
    A bientôt
    Si vous avez une piste

    #64212
    bebarth
    Maître des clés

    bonjour,
    pour quels totaux souhaites-tu afficher une alerte ???
    Pour les totaux ligne 1 à ligne 4 de tous les jours ???
    Pour les totaux L2+L3 et L1+L4 ???
    Pour les minis et les moyennes ???
    Est-ce juste une alerte ??? ou doit-il y avoir une action si les totaux dépassent 24 h ???
    @+
    :bonjour:

    #64213
    Crevette
    Membre

    Bonjour Bebarth,
    Merci de t’intéresser encore à mon cas; Il s’agit de demander à l’utilisateur s’il est bien certain des durées qu’il a renseigné lorsque le total/jour en “L2+L3” est supérieur à 24:00:00. Si ça lui convient alors tout va bien. C’est bien une simple alerte. Je cherche aussi une idée pour que le message d’alerte lui indique quel jour est concerné par le dépassement de 24h00.A+

    #64214
    bebarth
    Maître des clés

    …je termine juste un petit boulot (car j’ai aussi un métier  :geek: ) et je regarde ça !
    @+
    :bonjour:

    #64215
    bebarth
    Maître des clés

    Dans le fichier joint, le message s’affiche pour tous les jours où le total est supérieur à 24 h à chaque calcul, donc même si l’alerte à déjà été affichée pour un jour.
    Je suppose que tu voudrais ne le voir affiché que la première fois. Si oui, je verrai plus tard…
    J’ai également rajouté un scrip de champ désactivé pour le tableau 1 qui initialise à 00:00:00 si le champ est vide. Je te laisse le soin de faire de même pour le tableau 2.
    @+
    :bonjour:

    #64216
    Crevette
    Membre

    Merci BB. Effectivement l’idée est que l’alerte ne s’affiche qu’une seule fois par jour car cela peut être un choix de l’utilisateur de proposer une durée supérieure.
    Par contre je remarque que l’alerte se lance même pour une durée égale à 24:00:00.
    A+

    #64217
    bebarth
    Maître des clés

    J’ai effectivement mis >= 24. Je rectifierai.
    J’ai déjà une idée pour que le message n’apparaisse qu’une fois.
    Je suppose que le message doit apparaître dès 24:00:01 !
    @+

    :bonjour:

    #64218
    Merlin
    Maître des clés

    J’ai déjà une idée

    Moi aussi : https://www.abracadabrapdf.net/utilitaires/acrobat-plugins/abracadabrascripts/
    (Chercher : “alerte qui ne s’affiche qu’une seule fois”)
    :Smiley15:

    #64219
    bebarth
    Maître des clés

    bonjour Merlin,
    Je viens de regarder ton exemple sur l’abracadabraScripts que j’avais déjà depuis un bon moment, et “mon idée” est à peu près identique (sans le beep ).
    Ici, mon souci est de savoir où placer l’alerte, qui doit quand même réapparaitre si on fait une modification.
    Tous les champs sont avec un script de calcul et plus de 70 champs sont recalculés à chaque fois… la plupart devrait être en script d’action, champ désactivé, ce qui éviterait de tous les recalculer à chaque fois et me simplifierait la tâche pour afficher l’alerte !
    Généralement, lorsque j’essaye de résoudre un problème posé, je mets de côté le “personnellement je n’aurais pas fait comme ça”, mais ici à force de résoudre un problème + un autre + un autre, je pense qu’il serait bon maintenant qu’on connait (presque) toutes les questions de repartir à 0 avec ce formulaire. Il faut reprendre les noms des champs pour avoir quelque chose de plus “logique”, ce qui simplifierait les formules (même si en soit elle ne sont pas très compliquée)… Mais si on regarde les 6 fonctions appelées elles sont toutes faites sur le même principe. Je pense qu’en uniformisant le nom de champs on pourrait n’appeler plus qu’une seule fonction pour un même calcul.
    Mais tout ceci demande un peu de travaille et je n’aurai pas le temps de faire ça ces jours-ci… les vacances approchent…
    Si je trouve un moment, j’essaierai de regarder la semaine prochaine, mais je ne promets rien !
    en attendant, voici le fichier où le message apparait seulement à partir de 24:00:01.
    @+
    :bonjour:

    #64220
    Merlin
    Maître des clés

    Je n’ai pas tout suivi mais j’admire ton courage : je ne rentrerais pas dans un truc pareil sans avoir renommé tous les champs de façon logique et séquentielle. D’autant qu’avec la fonction dupliquer ça se fait en quelques minutes.

    Quant à l’alerte je crois que c’est beaucoup de soucis pour pas grand-chose : puisque ce n’est pas “bloquant” pourquoi ne pas tout simplement afficher les résultats > 24h en rouge (ou autre signe distinctif) ?
    Il n’y a rien de plus pénible qu’un formulaire ou un logiciel qui oblige à cliquer OK pour des alertes informatives…
    :Smiley15:

    #64221
    Crevette
    Membre

    Bonjour Merlin,
    Tu as tout fait raison, un affichage en rouge serait beaucoup plus efficient. C’est vrai que l’ouverture d’alertes peut rapidement devenir rébarbative. Je vais opter pour cette solution.

    Merci pour ton conseil.

    Bonne journée @+

    #64222
    bebarth
    Maître des clés

    bonjour,
    Voici la version avec texte en rouge si > 24 h.
    @+
    :bonjour:

    #64223
    Crevette
    Membre

    Bonjour Bebarth. C’est vraiment parfait. Tous mes remerciements.

    #64224
    bebarth
    Maître des clés

    bonjour,
    Voici donc une version qui n’appelle plus que 2 fonctions.
    J’avoue que ça demande au départ une petite réflexion logique à savoir ce qui peut être mis en variable, sinon le calcul en lui même n’est pas très complexe.
    J’espère que cela sera utile à quelqu’un au cas où cette version arrive trop tardivement pour Crevette.
    @+
    :bonjour:

    #64225
    Crevette
    Membre

    Bonjour Bebarth. Merci pour ce beau cadeau qui me sera utile à l’avenir.
    Bonne journée

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