Calcul avec des dates

Product :4D - 4D Server
4D : v14
OS : Windows

Bonjour,
Ma demande va paraitre débile au yeux de certain mais je suis bloqué dessus :mrgreen:
Dans une méthode qui demande d’entrée une date ,j’aimerai que si la date qui est inscrit a plus de 3 mois de décalage avec la date du jour ,j’affiche une alerte.
Exemple:
Si nous somme en date du jour le 02/02/17
Et que j’entre le 01/10/16
Cela ne doit pas pouvoir marcher…
Voici mon code. Je parie que mon erreur doit être stupide… :doubt:
Merci d’avance pour votre aide

<code 4D>
DemDate:=Date(Demander(“Saisissez une date :”;Chaine(!00/00/0000!)))
an_1:=Annee de(DemDate)
mois_1:=Mois de(DemDate)
AnDuJo:=Annee de(Date du jour)
MoDuJo:=Mois de (date du jour)
Si (OK=1)
si (mois_1 = MoDuJo -3)
alerte (“Bravo votre date est bonne”)
Sinon
alerte(“erreur votre date est fausse”)
Fin de si
fin de si
</code 4D>

En passant par http://doc.4d.com/4Dv14/4D/14.4/Ajouter-a-date.301-2511034.fr.htmlajouter à date> se serait plus simple et plus juste:
<code 4D>
DemDate:=Date(Demander(“Saisissez une date :”;Chaine(!00/00/0000!)))
si(DemDate<=ajouter a date(Date du jour;0;3;0))
alerte(“Bravo votre date est bonne”)
Sinon
alerte(“erreur votre date est fausse”)
Fin de si

</code 4D>

<code 4D>
$D_Date:=Current date
$D_Test:=Add to date($D_Date;0;3;0)

$D_Input:=Date(Request(“Saisissez une date :”;String(!00-00-00!)))
If (OK=1)
If ($D_Input<=$D_Test)
ALERT(“Bravo votre date est bonne”)
Else
ALERT(“erreur votre date est fausse”)
End if
End if
</code 4D>

Merci pour ta réponse
Sa marche parfaitement !

Bonjour,
ça dépend bigrement de ce que tu appelles “3 mois”…

En jours, avec 90 jours (approximation 30 jours par mois)
Quand on soustrait une date à une autre, le résultat est le nombre de jours qui les sépare
Quand on ajoute/soustrait un nombre à une date, le résultat est une date plus/moins ce nombre de jours
<code 4D>
$dateTest:=DemDate+90 //
Si($dateTest>Date du jour)
alerte(“ça fait plus de 90 jours”)
fin de si
</code 4D>

En comptant par mois, il faut utiliser la commande Ajouter a date
Cette commande permet d’ajouter séparément des jours, des mois ou des années.

Tu pourrais avoir ça, on regarde juste si 3 mois sont passés :
<code 4D>
$dateTest:=Ajouter a date(DemDate;0;3;1)
Si($dateTest>Date du jour)
alerte(“ça fait plus de 3 mois”)
fin de si
</code 4D>

Mais aussi ça, où on considère que si le mois 3 n’est pas terminé, c’est encore OK :
<code 4D>
$dateTest:=Ajouter a date(DemDate;0;3;1)
$debut:=(annee de(DemDate)*100)+mois de(DemDate)
$fin:=(annee de($dateTest)*100)+mois de($dateTest)
Si($debut>$fin)
alerte(“le 3ème mois est dépassé”)
fin de si
</code 4D>

Bref, faut bien définir ce que tu veux. En plus les exemples que je donne sont peut-être complètement faux, j’ai rien vérifié !

Fausse alerte… :mrgreen:
Cela ne marche pas …
Si par exemple en date du jour nous somme le 02/02/2017
Et que j’entre la date 05/05/16 cela ne devrait pas marcher, or il me dit que c’est bon…
Merci d’avance pour vos réponse :pray:

Je récapitule.
Je demande a l’utilisateur d’entré une date.
Si la date 3 mois de moins comparer a la date du jour cela ne doit pas marcher.
Si en date du jour nous somme le 02/02/2017
SI j’entre la date 02/11/2016 cela devrait marcher

SI j’entre la date 01/11/2016 ou 31/10/16 ou moins cela devrait PAS marcher.
Merci d’avance :pray:

Dans ce cas, c’est + ou - 3 mois c’est ça que tu veux ?

<code 4D>
DemDate:=Date(Demander(“Saisissez une date :”;Chaine(!00/00/0000!)))
Si(OK=1)
si(DemDate>=ajouter a date(Date du jour;0;-3;0)) & (DemDate<=ajouter a date(Date du jour;0;3;0))
alerte(“Bravo votre date est bonne”)
Sinon
alerte(“erreur votre date est fausse”)
Fin de si
Fin de si

</code 4D>

attention ! le code a été edité: c’est un ET pas un OU et il manquait un égale
:mrgreen:

Désolé Manuel Soit je suis aveugle soit y’a un schmilblick avec ton code :mrgreen:
Chaque test que j’ai fait avec ton code il me dit que c’est bon.
J’ai essayer 05/06/16 il me dit que c’est bon (alors que c’est faux :mrgreen: )
EDIT : Ooops J’ai pas vue le coup du “OU” a la place du “ET”. Cela a l’air de marcher ducoup merci :mrgreen:

:!: J’ai édité le code refais le test maintenant :wink: