Calcul entre date avec delai

Signaler
Messages postés
37
Date d'inscription
mardi 7 octobre 2008
Statut
Membre
Dernière intervention
29 décembre 2008
-
Messages postés
273
Date d'inscription
samedi 13 juin 2009
Statut
Membre
Dernière intervention
18 avril 2015
-
Bonsoir a tout le monde,
j'ai besoin d'un petit peut d'aide concernant un calcul entre deux dates dans une base de donnée.

a savoir:

je stocke une date dans un champ de base de donnée nommé : "DateCutter", accessible via un composant "rzdbdateTimeEdit16"
ensuite, via une liste de sélection du type: 1,2,3,4,5,6,7,8,9,10,11,12 mois
il me calcule l'écart par rapport au choix dans la liste

exemple pour être plus clair:
 si je sélectionne a la date du (01/01/2008)  un delai de (12 mois), il me donne le resultat dans un LABEL  => 01/01/2009

j'ai beau regarder, je suis un peut perdu, il plante mon delphi par moment !

Merci par avance

7 réponses

Messages postés
4719
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
1 février 2021
14
bonsoir,


quel est le message d'erreur sur le plantage?
et il existe des fonctions toutes prêtes qui font le calcul entre deux dates dans DateUtils comme IncDay, fonction.

cantador
Messages postés
2
Date d'inscription
mardi 15 novembre 2011
Statut
Membre
Dernière intervention
27 novembre 2011

result(date) = date + un délai
il me donne un résultat faux soit les jours ou les mois
Messages postés
4719
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
1 février 2021
14
Bonsoir,

Pourquoi vous répondez sur des vieux posts (celui-ci date du 13/11/2008 !!)
Bon, c'est vrai que cela ne fait que 3 ans de retard..
et en heure cosmique, c'est juste un battement de cils..

Mais en en temps terrien ?!

et puis écrire :
[b]
result(date) = date + un délai/b

C'est quoi ce truc...
Ce n'est pas un code !

on va faire un peu de poésie..
result(date) = date + un délai de remise en marche de la machine qui est tombée en panne suite
à un dysfonctionnement du générateur;C'est la raison pour laquelle, j'ai des erreurs..etc

Je rappelle que le post en question était le calcul du nombre de jours entre deux dates et que cette opération
est élémentaire et s'effectue à l'aide d'une fonction comme diffdate en SQL
ou en dehors d'une base de données en passant par les fonctions
EncodeDate ou DaysBetween ou DateTimeToJulianDate (jours juliens) etc.etc.

à moins que ericdu62x et hamdi04
ne font qu'un..

cantador
Messages postés
2
Date d'inscription
mardi 15 novembre 2011
Statut
Membre
Dernière intervention
27 novembre 2011

var
A1,M1,J1,AA,MM,JJ : Word;
begin
// exp: la date(31/12/2010) et j'ai adjouter un délai de : JJMMAA 03,4,0
DecodeDate(DateTimePicker1.date,A1,M1,J1 );
A1:=A1+AA;
M1:=M1+MM;
J1:=J1+JJ;
Label6.Caption := DateToStr(EncodeDate(A1,M1,J1));

et ici le pb ?
donc je cherche un code qui résoudre ce pb svp et merci d'avance.
Messages postés
4719
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
1 février 2021
14
la fonction encodedate marche
mais ce sont tes valeurs qui ne vont pas...

année 2010 + 3 = 2014 pas de problème
mais
décembre, 12 + 4 = 16 , ce mois n'existe pas..
Donc, il te faut introduire des tests de correction dans ton code
pour le mois
le numéro doit être compris entre 1 et 12

...et le jour, car là aussi tu vas avoir des soucis
la date doit être comprise entre 1 et 30 ou 31 ou (29 ou 28 pour février..)
selon les années bissextiles.

Utilises plutôt la fonction IncDay qui elle traduit automatiquement la date en fonction d'un nombre de jours ajoutés :
ex :
var
NbJour : integer;
begin
NbJour := 3;
  Label6.Caption := DateTimeToStr(IncDay((EncodeDate(2010, 12, 31)), NbJour));
end;


Elle fonctionne même en négatif..

Le hic, est de connaître maintenant le nomnre de jours à ajouter de manière précise..

Il suffit pour ça d'utiliser d'autres fonctions qui donnent le nombre de
jours exact en deux dates comme DaysBetween par exemple.

cherche un peu de ton côté pour mettre tout ça en forme
et nous sortir un code fonctionnel

cantador
bonjour tous le monde ;
svp je demande votre aide :
je suis debutant en programation, mon probleme est le calcul de la date retour.
voila :
* je programe sous delphi 7
* ma bd est access
* j'ai: a/dbedit1: date d'emprunt
b/dbedit2: delais
c/dbedit3: date retour
je ve doné une valeur à (a et b) pour avoir c
aidez moi svp
Messages postés
273
Date d'inscription
samedi 13 juin 2009
Statut
Membre
Dernière intervention
18 avril 2015
10
Bonsoir,
l'unité sysutils contient la solution:
{ IncMonth returns Date shifted by the specified number of months.
NumberOfMonths parameter can be negative, to return a date N months ago.
If the input day of month is greater than the last day of the resulting
month, the day is set to the last day of the resulting month.
Input time of day is copied to the DateTime result. }
et il gere bien les mois 30, 31, 28, 29.

function IncMonth(const Date: TDateTime; NumberOfMonths: Integer): TDateTime;
Dans ton cas:
datefin := IncMonth(dateDeb, NbrMois);

C'est super facile les dates, tu verras.
De plus, comme le type tDateTime est en fait un real double qui met les jours dans la partie entière
(depuis 01/01/18?? on s'en fout), les h, mn, sec, cc dans la partie decimale, on aura donc:
const
jour = 1.0;
semaine = jour *7;
heure = jour / 24;
minute = heure / 60;
seconde= minute / 60;
centsec= seconde / 100;

madatetime := madatetime + (3*heure) + (12*minute) + (4*seconde)
madate := madate + (3*jour) // ajoute 3 jours
madate := madate + (3*semaine) // ajoute 3 semaines
madate := incMonth(madate, 3) // ajoute 3 mois
madate := incMonth(madate, 3*12) // ajoute 3 ans sans erreur de bisextil
Ca marche avec des param positifs et négatifs.

Ca devrait aller.
salut.
solilog