abracadabraPDF › Forums › PDF – Général › Formulaire avec date calculée en JavaScript
Étiqueté : JavaScript date calcul
- Ce sujet contient 16 réponses, 3 participants et a été mis à jour pour la dernière fois par bebarth, le il y a 2 semaines et 6 jours.
-
CréateurSujet
-
19 septembre 2024 à 18:08 #74886Nath65Participant
Bonjour,
Je souhaite réaliser un formulaire qui comporte 2 dates :
• La date de commande = date du jour modifiable en avant mais bloquée pour les dates antérieurs
• La date limite de livraison = la date de la commande + 5 jours mais il y a 2 exceptions : si la date de commande est un lundi alors la date limite est le vendredi et si la date de commande est un mardi alors la date limite est le lundi.
Et-ce possible ? je débute en JavaScript, pouvez-vous m’aider ? D’avance merci de votre réponse.
Cordialement
Attachments:
You must be logged in to view attached files. -
CréateurSujet
-
AuteurRéponses
-
19 septembre 2024 à 20:07 #74888bebarthMaître des clés
bonjour,
En scripr de validation de ton champ date :
var jour=["Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"]
if (event.value!="") {
var d=util.scand("dd/mm/yyyy",event.value);
var laDate=d.getTime();
var aujourdhui=util.scand("dd/mm/yyyy", new Date()).getTime();
if (laDate>aujourdhui) {
app.alert("Veuillez indiquer une date antérieure à aujourd'hui.",3);
event.rc=false;
} else {
var jCommande=jour[d.getDay()];
this.getField("jourCommande").value=jCommande;
if (d.getDay()==1) var nbJours=4;
else if (d.getDay()==2) var nbJours=6;
else var nbJours=5;
var dateLivraison=laDate+(nbJours*24*3600*1000);
this.getField("DateLimite").value=new Date(dateLivraison);
var jLivraison=jour[new Date(dateLivraison).getDay()];
this.getField("jourLivraison").value=jLivraison;
}
}
@+
😎Attachments:
You must be logged in to view attached files.20 septembre 2024 à 03:35 #74890jctremblayParticipantUne date future à aujourd’hui et non pas antérieur. Donc, < et non pas > ici:
if (laDate<aujourdhui) {
app.alert("Veuillez indiquer une date future à aujourd'hui.",3);
20 septembre 2024 à 13:27 #74891bebarthMaître des clésbonjour,
Oups, j’avais mal lu…Donc, < et non pas >
Ça ne suffit pas dans ce sens là ! Sans indications supplémentaires la valeur de “laDate” est indiquée à minuit pile. Alors que la valeur de “aujourdhui” est indiquée à ‘instant “t”. À moins que l’on remplisse le champ à 0:00 au millième de seconde près, ce qui est peu probable… si “aujourdhui” est aujourd’hui, la valeur “laDate” est toujours inférieure à la valeur “aujourdhui”. 🙂
Le script est donc à modifier comme suit :
var jour=["Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"]
if (event.value!="") {
var d=util.scand("dd/mm/yyyy",event.value); // valeur donnée à minuit pile
var laDate=d.getTime()+24*3600*1000;
var aujourdhui=util.scand("dd/mm/yyyy", new Date()).getTime();
if (laDate<aujourdhui) {
app.alert("Veuillez indiquer une date postérieure ou égale à celle d'aujourd'hui.\rou\rVeuillez indiquer une date qui n'est pas antérieure à celle d'aujourd'hui.",3);
event.rc=false;
} else {
var jCommande=jour[d.getDay()];
this.getField("jourCommande").value=jCommande;
if (d.getDay()==1) var nbJours=4;
else if (d.getDay()==2) var nbJours=6;
else var nbJours=5;
var dateLivraison=laDate+((nbJours-1)*24*3600*1000); // ...comme on a modifié "laDate"
this.getField("DateLimite").value=new Date(dateLivraison);
var jLivraison=jour[new Date(dateLivraison).getDay()];
this.getField("jourLivraison").value=jLivraison;
}
} else {
this.getField("jourCommande").value="";
this.getField("DateLimite").value="";
this.getField("jourLivraison").value="";
}
@+
😎Attachments:
You must be logged in to view attached files.20 septembre 2024 à 16:47 #74904Nath65ParticipantBonjour et merci beaucoup de votre retour, mais je rencontre un problème que je ne comprends pas, votre fichier fonctionne, bien que je n’arrive pas à comprendre la logique du script. Mais quand j’applique le même script dans mon fichier, les 2 exceptions (commande un lundi ou un mardi) le décalage au vendredi ou lundi pour la date limite ne se fait plus alors que tout est identique…
D’autre part, je ne souhaite pas avoir de cases jourCommande et jourLivraison mais juste le décalage dans la date pour que la date limite ne soit pas le week-end.
Pouvez-vous m’aider ? Merci encore.
20 septembre 2024 à 17:39 #74905bebarthMaître des clésQu’est-ce qui ne fonctionne pas ?
Y a-t-il un message dans la console ?
Si tu ne veux pas ces informations, il faut retirer des lignes du script, ce qui donne :
var jour=["Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"]
if (event.value!="") {
var d=util.scand("dd/mm/yyyy",event.value); // valeur donnée à minuit pile
var laDate=d.getTime()+24*3600*1000;
var aujourdhui=util.scand("dd/mm/yyyy", new Date()).getTime();
if (laDate<aujourdhui) {
app.alert("Veuillez indiquer une date postérieure ou égale à celle d'aujourd'hui.\rou\rVeuillez indiquer une date qui n'est pas antérieure à celle d'aujourd'hui.",3);
event.rc=false;
} else {
var jCommande=jour[d.getDay()];
if (d.getDay()==1) var nbJours=4;
else if (d.getDay()==2) var nbJours=6;
else var nbJours=5;
var dateLivraison=laDate+((nbJours-1)*24*3600*1000); // ...comme on a modifié "laDate"
this.getField("DateLimite").value=new Date(dateLivraison);
var jLivraison=jour[new Date(dateLivraison).getDay()];
}
} else {
this.getField("DateLimite").value="";
}
@+
😎20 septembre 2024 à 20:21 #74908jctremblayParticipantC’est amusant comment il y a plusieurs chemin pour obtenir le même résultat avec le JavaScript.
J’ai réussi à obtenir 3, 4 méthode qui donnes le même résultat. Voici la plus courte.if (event.value) {
var enteredDate = util.scand("dd/mm/yyyy", event.value);
if (enteredDate >= new Date()) {
this.getField("DateLimite").value = util.printd("dd/mm/yyyy", new Date(enteredDate.getTime() + ([5,4,6,5,5,5,5][enteredDate.getDay()] * 86400000))
);
event.rc = true;
} else {
app.alert("La date doit être aujourd'hui ou une date ultérieure.");
event.rc = false; }
}
Attachments:
You must be logged in to view attached files.20 septembre 2024 à 20:43 #74910bebarthMaître des clésLa syntaxe est différente, mais le principe est le même !
@+
😎20 septembre 2024 à 21:53 #74911Nath65ParticipantMerci à tous les deux pour votre aide. Je ne comprends pas pourquoi ça ne fonctionne pas dans mon fichier. J’ai toujours 5 jours de plus quelque soit le jour de la semaine. J’essaierai de résoudre le problème lundi matin et je reviendrai vers vous.
Bon week-end et encore merci
20 septembre 2024 à 22:00 #74912bebarthMaître des clésPartage ton fichier si cela t’est possible.
@+
😎21 septembre 2024 à 09:19 #74913bebarthMaître des clésbonjour,
event.rc = true;
Juste pour info, ce n’est pas la peine d’indiquer
event.rc = true;
car c’est l’état par défaut de la validation si on indique pasevent.rc = false;
.
Ça fait une ligne de moins…@+
😎22 septembre 2024 à 01:09 #74914jctremblayParticipantJuste pour info, ce n’est pas la peine d’indiquer event.rc = true; car c’est l’état par défaut de la validation si on indique pas event.rc = false;. Ça fait une ligne de moins…
Donc le
event.rc = false;
n’est pas nécessaire également?22 septembre 2024 à 13:38 #74915bebarthMaître des clésbonjour,
Donc le event.rc = false; n’est pas nécessaire également?
Si, quand même ! Il faut bien pouvoir invalider la réponse, et donc conserver l’ancienne valeur. Tu doit par exemple entrer une valeur supérieure à 5. Admettons que l’ancienne valeur était 10, donc correcte et que tu entres un 3.
Si tu écris ce scrpt :
if (event.value>5) {
app.alert("Valeur correcte",3);
} else {
app.alert("Valeur incorrect",3);
}
Tu auras le message “Valeur incorrecte”, mais la valeur indiquée dans ton champ sera 3, alors que si tu écris :
if (event.value>5) {
app.alert("Valeur correcte",3);
} else {
event.rc=false;
app.alert("Valeur incorrect",3);
}
Tu auras le même message “Valeur incorrecte”, mais la valeur restera la précédente (donc 10).@+
😎22 septembre 2024 à 13:50 #74916jctremblayParticipantAh! Maintenant je saisis… 🙂
23 septembre 2024 à 14:10 #74925Nath65ParticipantBonjour,
J’ai reconstruit certains champs du formulaire qui semblaient ne plus intégrer les modifications…et cela fonctionne, merci 🙂 . Pour info, j’ai conservé la première syntaxe que je comprends mieux même si c’est plus long. Mais j’ai une nouvelle problématique : j’ai une 3ème case de date qui doit indiquer le début de la période de livraison avec par défaut la date de la commande en automatique et qui doit pouvoir être modifiée manuellement par une date postérieure et bloquée pour les date antérieure à la date de commande. j’espère être claire…
J’avais le script suivant qui fonctionnait avant que je ne modifie le script de la date de commande et qui ne fonctionne plus…
var date=util.scand(“dd/mm/yyyy”, this.getField(“StartDate”).value); var laDate=util.scand(“dd/mm/yyyy”, event.value); if (laDate.getTime()<date.getTime()) event.value=this.getField(“StartDate”).value;
et dans calcul :
if (event.source && event.source.name==”StartDate”) event.value=this.getField(“StartDate”).value;
Pouvez-vous m’aider à résoudre ce problème ? Merci d’avance !
Attachments:
You must be logged in to view attached files.24 septembre 2024 à 14:02 #74930Nath65ParticipantBonjour,
J’ai réussi à solutionner mon problème. Merci de votre aide
Bonne journée
25 septembre 2024 à 11:38 #74931bebarthMaître des clésbonjour,
J’ai réussi à solutionner mon problème.
Si d’autres ont le même problème ils se débrouilleront ???
@+
😎 -
AuteurRéponses
- Vous devez être connecté pour répondre à ce sujet.