OVH Cloud OVH Cloud

WDx Obtenir une date à partir d'une durée

7 réponses
Avatar
Georges Peyre
Bonjour,

Je veux obtenir par calcul une date, en partant d'une date saisie à
laquelle on ajoute ( ou retranche ) une durée en années, mois et jours

Je cherche ce code

Merci d'avance

Cordialement

--
Elle est pas belle la vie ?

7 réponses

Avatar
Juliane
Bonjour,

Une petite procédure qui marche bien :

PROCEDURE gCalculDateFin(dDateDebut est une Date, nCombien est un entier=0,
sTemps est chaîne = "J")

bvalid est un booléen = DateValide(dDateDebut)

resDate est une Date = dDateDebut

SI bvalid=Vrai ALORS

SI sTemps = "A" ALORS // Durée en années

resDate..Année += nCombien

FIN

SI sTemps = "M" ALORS // Durée en mois

resDate..Mois += nCombien

FIN

SI sTemps = "DM" ALORS // Durée en mois => Date de début de mois

resDate..Jour += nCombien

resDate..Jour = 1

FIN

SI sTemps = "FM" ALORS // Durée en mois => Date de fin de mois

resDate..Jour += nCombien

resDate..Jour = 31

FIN

SI sTemps = "J" ALORS // Durée en jours

resDate..Jour += nCombien

FIN

SI sTemps = "JFM" ALORS // Durée en jours => Date fin de mois

resDate..Jour += nCombien

resDate..Jour = 31

FIN

RENVOYER resDate

SINON

Erreur("Erreur dans le calcul de date")

RENVOYER ""

FIN

"Georges Peyre" a écrit dans le message de
news:
Bonjour,

Je veux obtenir par calcul une date, en partant d'une date saisie à
laquelle on ajoute ( ou retranche ) une durée en années, mois et jours

Je cherche ce code

Merci d'avance

Cordialement

--
Elle est pas belle la vie ?




Avatar
Georges Peyre
Bonjour Juliane,
Et merci pour votre procédure.
Cependant je crois ne pas savoir comment l'utiliser pour ce que je
cherche car la durée n'est pas en année ou en mois ou en jours, mais en
année ET mois ET jour
Comment utiliser votre procédure pour leq cas suivants :
Exemples :
Quelle est la date qui correspond à 3 ans, 3 mois et 22 jours AVANT le
02-04-2005
ou
Quelle sera la date dans 2 ans, 5 mois et 3 jours APRES le 28-04-2005

Dans ce cas comment utiliser votre procédure ?

Cordialement



Juliane a émis l'idée suivante :
Bonjour,

Une petite procédure qui marche bien :

PROCEDURE gCalculDateFin(dDateDebut est une Date, nCombien est un entier=0,
sTemps est chaîne = "J")




--
Elle est pas belle la vie ?
Avatar
Marcel.berman
Salut !


J'essaierais ceci :

CalculDate(daDate est une date, duDurée est une durée,nSens est un
entier=+1)
// daDate est la date à partir de laquelleon vacalculer
// duDurée est la durée que l'on va, selon les cas, ajouter ou soustraire
// nSens est un entier égal à +1 ou -1 selon que l'on veaut ajouter
ousoustraire la durée à la date ...

Si nSens >= 1 alors
daDate..année = dadate..année + duDurée..année
daDate..mois = datate..mois + duDurée..mois
daDate..jour = daDate..jour + duDurée..Jour
sinon
daDate..année = dadate..année - duDurée..année
daDate..mois = datate..mois - duDurée..mois
daDate..jour = daDate..jour - duDurée..Jour
fin


!! Pas vérifié !!
En espérant que cela marche !
Je me pose des questions en ce qui concerne la soustraction ... Quid si le
résultat mois ou jour est 0 ?
WD gère t'il ce cas ?
Je ne sais pas/plus ...
sinon, on peut faire un petit test avant de soustraire ...

Bien à toi!
--
Marcel Berman
c/o Managing Business SPRL
Allée du Petit Paris, 11
B - 1410 - Waterloo
Tel : +32 2 351.60.64
Fax : +32 2 351.45.78
Gsm : +32 475.799.477
Avatar
Georges Peyre
Bonjour

Merci à tous pour votre aide

Gilles Guédikian a formulé la demande :

D est une date="20050402"

D..année -= 3
D..mois -= 5
D..jour -= 3

Info(D)



Après vérification je vais utiliser cette formule pour soustraire
et celle-ci pour ajouter la durée à une date

D..Année += 3
D..Mois += 5
D..Jour += 3

Cordialement


--
Elle est pas belle la vie ?
Avatar
Juliane
Bonjour,

Personnellement, je l'utilise en procédure globale, et si j'ai plusieurs
éléments à calculer, je la lance plusieurs fois de suite, style :

dDateDepart est une date = "20050428"
dDate = gCalculDateFin(dDateDepart,2,"A")
dDate = gCalculDateFin(dDateDepart,5,"M")
dDate = gCalculDateFin(dDateDepart,3,"J")

Et cela marche aussi en négatif :
dDateDepart est une date = "20050402"
dDate = gCalculDateFin(dDateDepart,-3,"A")
dDate = gCalculDateFin(dDateDepart,-3,"M")
dDate = gCalculDateFin(dDateDepart,-22,"J")

Par ailleurs, après mon post, j'ai réalisé que cela serait plus simple
d'écrire "SELON ... CAS" plutôt que des "SI" multiples !!!
Comme quoi, même faire des réponses permet de s'améliorer soi-même ...

Cordialement

"Georges Peyre" a écrit dans le message de
news:
Bonjour Juliane,
Et merci pour votre procédure.
Cependant je crois ne pas savoir comment l'utiliser pour ce que je
cherche car la durée n'est pas en année ou en mois ou en jours, mais en
année ET mois ET jour
Comment utiliser votre procédure pour leq cas suivants :
Exemples :
Quelle est la date qui correspond à 3 ans, 3 mois et 22 jours AVANT le
02-04-2005
ou
Quelle sera la date dans 2 ans, 5 mois et 3 jours APRES le 28-04-2005

Dans ce cas comment utiliser votre procédure ?

Cordialement



Juliane a émis l'idée suivante :
> Bonjour,
>
> Une petite procédure qui marche bien :
>
> PROCEDURE gCalculDateFin(dDateDebut est une Date, nCombien est un


entier=0,
> sTemps est chaîne = "J")
>

--
Elle est pas belle la vie ?




Avatar
Juliane
Bonjour,

Personnellement, je l'utilise en procédure globale, et si j'ai plusieurs
éléments à calculer, je la lance plusieurs fois de suite, style :

dDateDepart est une date = "20050428"
dDate = gCalculDateFin(dDateDepart,2,"A")
dDate = gCalculDateFin(dDateDepart,5,"M")
dDate = gCalculDateFin(dDateDepart,3,"J")

Et cela marche aussi en négatif :
dDateDepart est une date = "20050402"
dDate = gCalculDateFin(dDateDepart,-3,"A")
dDate = gCalculDateFin(dDateDepart,-3,"M")
dDate = gCalculDateFin(dDateDepart,-22,"J")

Par ailleurs, après mon post, j'ai réalisé que cela serait plus simple
d'écrire "SELON ... CAS" plutôt que des "SI" multiples !!!
Comme quoi, même faire des réponses permet de s'améliorer soi-même ...

Cordialement

"Georges Peyre" a écrit dans le message de
news:
Bonjour Juliane,
Et merci pour votre procédure.
Cependant je crois ne pas savoir comment l'utiliser pour ce que je
cherche car la durée n'est pas en année ou en mois ou en jours, mais en
année ET mois ET jour
Comment utiliser votre procédure pour leq cas suivants :
Exemples :
Quelle est la date qui correspond à 3 ans, 3 mois et 22 jours AVANT le
02-04-2005
ou
Quelle sera la date dans 2 ans, 5 mois et 3 jours APRES le 28-04-2005

Dans ce cas comment utiliser votre procédure ?

Cordialement



Juliane a émis l'idée suivante :
> Bonjour,
>
> Une petite procédure qui marche bien :
>
> PROCEDURE gCalculDateFin(dDateDebut est une Date, nCombien est un


entier=0,
> sTemps est chaîne = "J")
>

--
Elle est pas belle la vie ?




Avatar
Georges Peyre
Merci Juliane


Juliane a exprimé avec précision :
Personnellement, je l'utilise en procédure globale, et si j'ai plusieurs
éléments à calculer, je la lance plusieurs fois de suite, style :

dDateDepart est une date = "20050428"
dDate = gCalculDateFin(dDateDepart,2,"A")
dDate = gCalculDateFin(dDateDepart,5,"M")
dDate = gCalculDateFin(dDateDepart,3,"J")

Et cela marche aussi en négatif :
dDateDepart est une date = "20050402"
dDate = gCalculDateFin(dDateDepart,-3,"A")
dDate = gCalculDateFin(dDateDepart,-3,"M")
dDate = gCalculDateFin(dDateDepart,-22,"J")




--
Elle est pas belle la vie ?