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 8 mois.
- CréateurSujet
- 25 février 2025 à 09:44 #75475
Pierre2025
ParticipantBonjour à 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 ?
- CréateurSujet
- AuteurRéponses
- 25 février 2025 à 10:14 #75478
MerlinMaître des clésBonjour
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.28 février 2025 à 13:35 #75526
bebarthMaître des clésbonjour,
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.28 février 2025 à 18:53 #75532
MerlinMaître des clésWaow !
7 mars 2025 à 22:14 #75623
bebarthMaître des clésbonjour,
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. - AuteurRéponses
- Vous devez être connecté pour répondre à ce sujet.
