abracadabraPDF › Forums › PDF – Général › Calcul date automatique j+1, j+2, j+3….
Étiqueté : #calculdate #automatisationdate
- Ce sujet contient 16 réponses, 4 participants et a été mis à jour pour la dernière fois par michel c., le il y a 2 années et 11 mois.
-
CréateurSujet
-
22 novembre 2021 à 13:31 #69978SEBCOLINIParticipant
Bonjour,
J’ai développé un Agenda PDF et j’ai besoin d’automatiser les dates sur 6 semaines suivant la date de début de l’agenda qui elle est aléatoire
J’ai besoin du script qui permet de d’ajouter (1, 2, 3, x…) journée sur une date saisie
J’espère que mes explications sont claires
Je vous remercie par avance pour votre retour
Cordialement
Attachments:
You must be logged in to view attached files. -
CréateurSujet
-
AuteurRéponses
-
22 novembre 2021 à 14:02 #69980bebarthMaître des clés
bonjour,
Voici un script de calcul pour ajouter 1 jour à la date (champ laDate) :var chaine=this.getField("laDate").valueAsString;
if (chaine!="") {
// des éléments de la date
var jour=chaine.substring(0,2);
var mois=chaine.substring(3,5);
var annee=chaine.substring(6,10);
//Définition de l'objet date + 1 jour (les mois sont numérotés de 0 à 11)
var d=new Date(annee,(mois-1),jour);
var n=d.getTime()+(1*24*3600*1000); // 1 pour 1 jour, n est en millisecondes
var date=new Date(n);
this.event.target.value=date;
} else {
this.event.target.value="";
}
Pour ton exemple, il faudrait peut-être mieux mettre une fonction en script de document au lieu de dupliquer ce script.
Si tu veux, tu peux partager ton fichier.@+
😎22 novembre 2021 à 14:12 #69981SEBCOLINIParticipant22 novembre 2021 à 15:46 #69984MerlinMaître des clésBonjour et bienvenue
J’ai placé ce script en script de validation dans le champ de départ (en orange dans le ci-joint).
(Le format de date du champ de départ doit correspondre à celui de la 3e ligne du script)
var daDate = event.value;
if(daDate !== "") {
var aDate = util.scand("dd/mm/yyyy", daDate);
if(aDate) {
for (var i=1; i<42; i++) {
var Dday = i * 24 * 60 * 60 * 1000;
oNewDate = new Date(Dday + aDate.getTime());
this.getField("date." + i).value = util.printd("dd/mm/yyyy", oNewDate);
}
}
}
else {
for (var i=1; i<42; i++) {
this.getField("date." + i).value = "";
}
}
Attachments:
You must be logged in to view attached files.22 novembre 2021 à 17:05 #69987MerlinMaître des clésJe viens de re-regarder le document : je trouve que dissocier les noms de jour (en dur, dans le fond de page) et les dates (dans des champs de formulaire) est source d’erreur car rien ne vérifie la concordance entre date et jour.
À mon avis il vaudrait mieux n’utiliser que des dates longues (avec le nom du jour) dans les champs.
😎
22 novembre 2021 à 18:29 #69988bebarthMaître des clésVoici ma version qui vérifie que la date entrée est bien un lundi !
Le calcul de date est en script de document.
@+
😎Attachments:
You must be logged in to view attached files.22 novembre 2021 à 20:17 #69990MerlinMaître des clés🙌🙌🙌
👏👏
👍
22 novembre 2021 à 21:11 #69991SEBCOLINIParticipantUn grand merci à tous ! Ça marche !
🙏🙏🙏🤩🤩🤩2 janvier 2022 à 22:27 #70257michel c.ParticipantBonjour, je relance ce fil car il y a un truc qui me chiffonne avec ce fichier…
Au travail, nous avons opté pour un autre logiciel qu’adobe DC pour des raisons financières.
Jusqu’à présent tous les formulaires fonctionnaient aussi bien sur adobe reader DC que sur notre logiciel.
Mais là, c’est le 1er fichier qui me pose un problème (la même date s’affiche dans tous les champs)
Ensuite, j’ai essayé de rajouter les champs manquants pour les semaines 3 à 6 en copiant les scripts et là, même sur adobe reader DC cela ne marche plus, certaines dates sont incohérentes.
Bref, je sèche un peu là….
Attachments:
You must be logged in to view attached files.2 janvier 2022 à 22:28 #70260michel c.Participant4 janvier 2022 à 16:22 #70271bebarthMaître des clésbonjour,
À part qu’il y a une erreur de dénomination des champs à partir de “date.10” (existe 2 fois), le script fonctionnait.
Sauf qu’il est en script de calcul de tous les champs et est donc exécuté au moindre évènement !Essaie donc avec ce nouveau fichier. Le champ “laDate” n’est plus au format Date, mais il y a un script de touches personnalisé qui ne permet que de frapper des dates correctes et qui vérifie que la date est bien un lundi. Impossible de même frapper une date incorrecte (un 31 avril par exemple ou le 29 février d’une année non bissextile).
@+
😎Attachments:
You must be logged in to view attached files.5 janvier 2022 à 18:50 #70297michel c.ParticipantBonjour, j’ai testé et cela fonctionne sur Adobe mais toujours pas sur notre logiciel.
J’essaye de comprendre…
J’ai affecté le script initial à un bouton en le modifiant un peu (un champ permet de saisir le nombre de jours de décalage pour afficher la date à n+le nombre de jours) : j’ai demandé à afficher sur la console les variables pour voir ce qui ne va pas.
Donc pour la date du 25/03/2030 avec 10 jours de décalage, la console affiche ceci :
le numéro du jour extrait de la date saisie (jour) → 25
le numéro du mois extrait de la date saisie (mois) → 03
l’année extrait de la date saisie (annee) → 2030
le nombre de jours de décalage (nb) → 10
la date saisie (d) → Mon Mar 25 2030 00:00:00 GMT+0100 (Paris, Madrid)
le résultat du calcul (d.getTime()+(nb*24*3600*1000)) (variable n) → 1901487600000
la date calculée avec le décalage (util.printd(“dd/mm/yyyy”, new Date())) → 05/01/2022C’est sur cette ligne que ça cloche ; quelle que soit la date choisie, et le nombre de jours de décalage j’ai cette date du 5/01/22
Attachments:
You must be logged in to view attached files.6 janvier 2022 à 08:49 #70313michel c.ParticipantMême problème sur le dernier fichier proposé. J’ai juste ajouté un bouton pour afficher les valeurs sur la console.
Je me demandais si il n’y avait pas une solution pour contourner ce problème. Pour cela je voulais savoir à quoi correspond la variable n (il me semble que c’est l’intervalle de temps en millisecondes entre la date décalée et le 1er janvier 1970) mais je ne suis pas sûr.
Attachments:
You must be logged in to view attached files.6 janvier 2022 à 09:55 #70317MerlinMaître des clés“j’ai testé et cela fonctionne sur Adobe mais toujours pas sur notre logiciel. J’essaye de comprendre…”
A priori la réponse est simple (et peu plaisante) : ce logiciel ne supporte pas toutes les fonctionnalités d’ECMAScript.
Voir : https://www.abracadabrapdf.net/format_pdf/normes_iso_et_pdf/norme-iso-ecmascript-for-pdf/
6 janvier 2022 à 10:20 #70320bebarthMaître des clésbonjour,
(util.printd(« dd/mm/yyyy », new Date())) → 05/01/2022 C’est sur cette ligne que ça cloche ; quelle que soit la date choisie, et le nombre de jours de décalage j’ai cette date du 5/01/22
Il faut écrire : util.printd(« dd/mm/yyyy », new Date(n)); sinon c’est le jour actuel qui est pris en compte !
@+
😎- Cette réponse a été modifiée le il y a 2 années et 11 mois par bebarth.
6 janvier 2022 à 10:27 #70322michel c.ParticipantBonjour, entre temps j’ai réussi à faire quelque chose qui fonctionne (avec l’aide du net) → voir en pièce jointe
bonjour,
michel c. wrote:
(util.printd(« dd/mm/yyyy », new Date())) → 05/01/2022 C’est sur cette ligne que ça cloche ; quelle que soit la date choisie, et le nombre de jours de décalage j’ai cette date du 5/01/22
Il faut écrire : util.printd(« dd/mm/yyyy », new Date(n)); sinon c’est le jour actuel qui est pris en compte ! @+Je vais essayer d’intégrer cela pour voir ce que ça donne.
Merci
- Cette réponse a été modifiée le il y a 2 années et 11 mois par michel c..
Attachments:
You must be logged in to view attached files.6 janvier 2022 à 10:36 #70327michel c.ParticipantJe viens de regarder, c’est ce qui est fait dans le script mais en passant par la variable oDate
-
AuteurRéponses
- Vous devez être connecté pour répondre à ce sujet.