|
FORUMS PROFESSIONNELS WINDEV, WEBDEV et WINDEV Mobile |
| | | | | |
Accueil → WINDEV 28 → 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é 365 messages Popularité : +12 (12 votes) |
|
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 SI 1 <= nJour <= 30 ALORS bPeriodeNoel = Vrai FIN
CAS 1 SI 1 <= nJour <= 15 ALORS 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 SI 1 <= nJour <= 30 ALORS bPeriodeNoel = Vrai FIN
CAS 1 SI 1 <= nJour <= 15 ALORS bPeriodeNoel = Vrai FIN
AUTRE CAS bPeriodeNoel = Faux FIN
D'avance merci,
Fany |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 365 messages Popularité : +12 (12 votes) |
|
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 SI 1 <= nJour <= 30 ALORS bPeriodeNoel = Vrai FIN
CAS 1 SI 1 <= nJour <= 15 ALORS 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é 96 messages Popularité : +18 (20 votes) |
|
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 : @Johjo07Message modifié, 29 novembre 2017 - 17:56 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 96 messages Popularité : +18 (20 votes) |
|
Posté le 30 novembre 2017 - 08:58 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 841 messages Popularité : +19 (27 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 |
| |
| |
| | | |
|
| | | | |
| | |
| | |
| |
|
|
|