PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 23 → Date comprise entre deux dates : comment ne pas tenir compte de l'année ?
Date comprise entre deux dates : comment ne pas tenir compte de l'année ?
Débuté par Fany, 29 nov. 2017 13:53 - 7 réponses
Membre enregistré
242 messages
Posté le 29 novembre 2017 - 13:53
Bonjour à tous,

Pourriez vous m'aider svp ? J'ai un code qui fonctionne. Mais j'imagine qu'il y a bien mieux.

Voilà ma question :
Savez vous comment vérifier si DateSys() est compris entre deux dates, mais sans tenir compte de l'année en cours ?
Je veux lancer ma procédure uniquement entre le 1er Décembre et le 15 Janvier de chaque année.

Je vous met mon code ci-dessous (je sais, c'est pas joli joli comme façon de programmer, mais au moins ça fonctionne) Je n'attends que vos conseils pour améliorer tout ça :
bPeriodeNoel est un booléen = Faux
dDateAujourdhui est une Date = DateSys()
nJour est un entier = dDateAujourdhui..Jour

SELON MoisEnCours()
CAS 12 // je suis en decembre
SI 1 <= nJour <= 30 ALORS // vérif jours
bPeriodeNoel = Vrai
FIN

CAS 1 // je suis en Janvier
SI 1 <= nJour <= 15 ALORS // vérfi jours
bPeriodeNoel = Vrai
FIN

AUTRE CAS
bPeriodeNoel = Faux
FIN


D'avance merci,

Fany
Posté le 29 novembre 2017 - 14:25
Bonjour,
Il suffit à partir de la date du jour de forcer l'année (par exemple 2000),
puis de tester si elle est comprise entre le 01/12/1999 et le 15/01/2000.

Frédéric.

"Fany" a écrit dans le message de groupe de discussion :
20171eefce6a6c7bd6f93687a73d12edc83c@news.pcsoft.fr...

Bonjour à tous,

Pourriez vous m'aider svp ? J'ai un code qui fonctionne. Mais j'imagine
qu'il y a bien mieux.

Voilà ma question :
Savez vous comment vérifier si DateSys() est compris entre deux dates, mais
sans tenir compte de l'année en cours ?
Je veux lancer ma procédure uniquement entre le 1er Décembre et le 15
Janvier de chaque année.

Je vous met mon code ci-dessous (je sais, c'est pas joli joli comme façon de
programmer, mais au moins ça fonctionne) Je n'attends que vos conseils pour
améliorer tout ça :
bPeriodeNoel est un booléen = Faux
dDateAujourdhui est une Date = DateSys()
nJour est un entier = dDateAujourdhui..Jour

SELON MoisEnCours()
CAS 12 // je suis en decembre
SI 1 <= nJour <= 30 ALORS // vérif jours
bPeriodeNoel = Vrai
FIN

CAS 1 // je suis en Janvier
SI 1 <= nJour <= 15 ALORS // vérfi jours
bPeriodeNoel = Vrai
FIN

AUTRE CAS
bPeriodeNoel = Faux
FIN


D'avance merci,

Fany
Membre enregistré
242 messages
Posté le 29 novembre 2017 - 15:01
Pas bête, je n'avais pas pensé à ça !
Merci Frédéric, vraiment :)

Je vais rectifier mon code.

Merci et bonne journée
Posté le 29 novembre 2017 - 15:06
Fany a présenté l'énoncé suivant :
Bonjour à tous,

Pourriez vous m'aider svp ? J'ai un code qui fonctionne. Mais j'imagine qu'il
y a bien mieux.

Voilà ma question :
Savez vous comment vérifier si DateSys() est compris entre deux dates, mais
sans tenir compte de l'année en cours ? Je veux lancer ma procédure
uniquement entre le 1er Décembre et le 15 Janvier de chaque année.

Je vous met mon code ci-dessous (je sais, c'est pas joli joli comme façon de
programmer, mais au moins ça fonctionne) Je n'attends que vos conseils pour
améliorer tout ça :
bPeriodeNoel est un booléen = Faux
dDateAujourdhui est une Date = DateSys()
nJour est un entier = dDateAujourdhui..Jour

SELON MoisEnCours()
CAS 12 // je suis en decembre
SI 1 <= nJour <= 30 ALORS // vérif jours
bPeriodeNoel = Vrai
FIN

CAS 1 // je suis en Janvier
SI 1 <= nJour <= 15 ALORS // vérfi jours
bPeriodeNoel = Vrai
FIN

AUTRE CAS bPeriodeNoel = Faux
FIN


D'avance merci,

Fany


dDateDeb est date
dDateFin est date

dDateDeb = datesys()
dDateDeb..Jour = 1
dDateDeb..Mois = 12

dDateFin = dDateDeb
dDateFin..Mois += 1
dDateFin..Jour = 15

si dDateDeb <= Datesys() <= dDateFin alors .....

--
Cordialement JeAn-PhI
Posté le 29 novembre 2017 - 16:34
Salut !

Comme ceci par exemple :

SI MoisEnCours() =12 OU (MoisEnCours()=1 ET Droite(DateSys(),2)<="15") ALORS
BPeriodeNoel=vrai
fin

Note que dans ton code, Njour<=30 oublie le 31...

ElPato
Membre enregistré
34 messages
Posté le 29 novembre 2017 - 17:54
Bonjour,

je vous propose la solution suivante, qui devrait marcher quelque soit l'année :

L'idée est de comparer la partie MMJJ d'une date avec la partie MMJJ des dates qui l'encadrent.

bPeriodeNoel = "1201" <= DateVersChaîne(MaDate, "MMJJ") <= "1231" _OU_ "0101" <= DateVersChaîne(MaDate, "MMJJ") <= "0115"


Le test est en deux parties car on est à cheval sur deux années. Mais on peut le faire en une seule partie si on inverse le sens de la condition.
Attention aux symboles de comparaison qui passent à strictement inférieur.

Voici le code :
bPeriodeNoel = PAS "0115" < DateVersChaîne(MaDate, "MMJJ") < "1201"


Bien entendu, vous pouvez remplacer 0115 et 1201 par un dateverschaine et une date pour pouvoir personnaliser les bornes.

Si vous souhaitez, je peux détailler les étapes pour arriver du premier code au second code.

Bonne journée à vous !

--
Johjo aka Jonathan Laurent

Mon blog sur WinDev : http://blog.ytreza.org
Me contacter par Twitter : @Johjo07
Message modifié, 29 novembre 2017 - 17:56
Membre enregistré
34 messages
Posté le 30 novembre 2017 - 08:58
Votre question m'a inspiré et je me suis permis d'en faire un article pour mon blog.

http://blog.ytreza.org/windev-savoir-si-une-date-est-dans-une-periode-sans-tenir-compte-de-lannee/

Il est plus complet et détaillé que ma réponse.

Bonne journée à tous !

--
Johjo aka Jonathan Laurent

Mon blog sur WinDev : http://blog.ytreza.org
Me contacter par Twitter : @Johjo07
Membre enregistré
836 messages
Popularité : +5 (9 votes)
Posté le 30 novembre 2017 - 13:46
nDate1 est un entier = DateVersEntier(dDate1)
nDate2 est un entier = DateVersEntier(dDate2)
nDate3 est un entier = DateVersEntier(dDate3)
SI (nDate3 > nDate1) ET (nDate3 < nDate2) ALORS
RENVOYER(Vrai)
SINON
RENVOYER(Faux)
FIN


--
Cordialement,
Camus