Donnez vie à vos documents numériques !
 

Script pour corriger une date

abracadabraPDF Forums PDF – Général Script pour corriger une date

  • Ce sujet contient 4 réponses, 3 participants et a été mis à jour pour la dernière fois par bebarth, le il y a 3 semaines.
  • Créateur
    Sujet
  • #75475
    Pierre2025
    Participant

    Bonjour à tous,

    j’ai créer un champ pour une date au format dd.mm.yyyy

    J’aimerais que si la personne saisit 1.2.25 par exemple, le formulaire corrige tout seul à 01.02.2025

    Est-ce possible ? via un script ?

Affichage de 4 réponses de 1 à 4 (sur un total de 4)
  • Auteur
    Réponses
  • #75478
    Merlin
    Maître des clés

    Bonjour

     

    C’est possible si l’utilisateur saisit “1.2.2025”, s’il ne saisit pas l’année en entier ça retourne une erreur (alerte de format).

    Dans le ci-joint, clique dans le champ pour voir ce qui a été saisi.

     

    Attachments:
    You must be logged in to view attached files.
    #75526
    bebarth
    Maître des clés

    bonjour,
    C’est possible si tu n’utilise pas un champ date mais un champ texte en forçant l’utilisation des caractère.
    Il y a 2 possibilités : Soit tu obliges l’utilisateur à taper tous les chiffres et dans ce cas tu peux insérer automatiquement les points de séparation ou l’utilisateur peut ne taper qu’un seul chiffres pour les jours et mois et 2 chiffres pour l’année et un script de format personnalisé se charge de remettre ça en forme.
    Voici les scripts utilisés dans mon document exemple qui vérifie les mois de 30 et 31 jours ainsi que le 29 février des année bissextiles :

    // script de document
    function verifDate(laDate) {
    var jour=Number(laDate.substr(0,2));
    var mois=Number(laDate.substr(3,2));
    var annee=Number(laDate.substr(6));
    var bissextile=annee%4==0 && (annee%100!=0 || annee%400==0)?"OUI":"NON";
    if (mois==2) {
    var leMois="FEVRIER";
    } else if (mois==4 || mois==6 || mois==9 || mois==11) {
    var leMois="30 JOURS";
    } else {
    var leMois="31 JOURS";
    }
    if (laDate.length==6) return (leMois=="30 JOURS" && jour<=30) || leMois=="31 JOURS" || (leMois=="FEVRIER" && jour<=29);
    else return (leMois=="30 JOURS" && jour<=30) || leMois=="31 JOURS" || (leMois=="FEVRIER" && jour<=28) || (bissextile=="OUI" && jour<=29);
    }

    // Script de touches personnalisé pour date entrée 01.02.2025
    if(!event.willCommit) {
    if (event.change==",") event.change=".";
    if ((/^0$/.test(event.value) || /^\d{2}\.0$/.test(event.value)) && event.change==0) var dateOK=false;
    else {
    var aTester=event.value.split("");
    if (event.value.length==1 && event.change!="") event.change=event.change+"\.";
    if (event.value.length==4 && event.change!="") event.change=event.change+"\.";
    aTester.splice(event.selStart, event.selEnd-event.selStart, event.change);
    var testeChaine=aTester.join("");
    if (testeChaine.length==6 || testeChaine.length==10) var dateOK=verifDate(testeChaine);
    else var dateOK=true;
    }
    var modeleRegEx=/^(([0-2][0-9]?|(3)[0-1]?)([\.](((0)[0-9]?|(1)[0-2]?)([\.]([2]([0]\d{0,2})?)?)?)?)?)?$/;
    event.rc=modeleRegEx.test(testeChaine) && dateOK;
    } else {
    var modeleRegEx=/^(\d{2}\.\d{2}\.\d{4})?$/;
    event.rc=event.value=="" || modeleRegEx.test(event.value);
    }

    // Script de touches personnalisé pour date entrée 1.2.25
    if(!event.willCommit) {
    if (event.change==",") event.change=".";
    if ((/^0$/.test(event.value) || /^\d{1,2}\.0$/.test(event.value) || /^\d{1,2}\.\d{1,2}\.0?$/.test(event.value)) && event.change==0) var dateOK=false;
    else {
    var aTester=event.value.split("");
    aTester.splice(event.selStart, event.selEnd-event.selStart, event.change);
    var testeChaine=aTester.join("");
    var aRetester=testeChaine.split(".");
    for (var i=0; i<aRetester.length; i++) {
    if (i==0 || i==1) {
    if (aRetester.length==1) aRetester="0"+aRetester+".";
    else aRetester=aRetester.toString()+".";
    } else if (i==3 && aRetester.length==2) aRetester="20"+aRetester;
    }
    var testeChaine=aRetester.join("");
    if (testeChaine.length==6 || testeChaine.length==10) var dateOK=verifDate(testeChaine);
    else var dateOK=true;
    }
    var modeleRegEx=/^(([0-2]?[0-9]?|(3)[0-1]?)([\.](((0)?[0-9]?|(1)[0-2]?)([\.](([2][0]?)?\d{0,2})?)?)?)?)?$/;
    event.rc=modeleRegEx.test(testeChaine) && dateOK;
    } else {
    var modeleRegEx=/^(\d{1,2}\.\d{1,2}\.\d{2,4})?$/;
    event.rc=event.value=="" || modeleRegEx.test(event.value);
    }

    // Script de format personnalisé
    var cetteDate=event.target.value.split(".");
    if (cetteDate[0].length==1) cetteDate[0]="0"+cetteDate[0];
    if (cetteDate[1].length==1) cetteDate[1]="0"+cetteDate[1];
    if (cetteDate[2].length==2) cetteDate[2]="20"+cetteDate[2];
    event.value=cetteDate[0]+"."+cetteDate[1]+"."+cetteDate[2];

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    #75532
    Merlin
    Maître des clés

    Waow !

    #75623
    bebarth
    Maître des clés

    bonjour,
    J’ai légèrement modifié l’expression régulière car on pouvait écrire “00” pour les jours et mois lors d’une modification de date.
    La nouvelle expression régulière contrôlant la frappe est :
    var modeleRegEx=/^((0[1-9]?|[1-2][0-9]?|3[0-1]?)([\.]((0[1-9]?|1[0-2]?)([\.]([2]([0]\d{0,2})?)?)?)?)?)?$/;
    Maintenant, ce n’est plus possible… De plus, le 20 de l’année est automatiquement indiqué après le second point.

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
Affichage de 4 réponses de 1 à 4 (sur un total de 4)
  • Vous devez être connecté pour répondre à ce sujet.