Calcul entre date avec delai

ericdu62x Messages postés 37 Date d'inscription mardi 7 octobre 2008 Statut Membre Dernière intervention 29 décembre 2008 - 12 nov. 2008 à 18:08
solilog Messages postés 273 Date d'inscription samedi 13 juin 2009 Statut Membre Dernière intervention 18 avril 2015 - 5 févr. 2013 à 20:18
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

cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
13 nov. 2008 à 15:31
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
0
cs_hamdi04 Messages postés 2 Date d'inscription mardi 15 novembre 2011 Statut Membre Dernière intervention 27 novembre 2011
24 nov. 2011 à 16:16
result(date) = date + un délai
il me donne un résultat faux soit les jours ou les mois
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
24 nov. 2011 à 19:12
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
0
cs_hamdi04 Messages postés 2 Date d'inscription mardi 15 novembre 2011 Statut Membre Dernière intervention 27 novembre 2011
27 nov. 2011 à 08:55
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
27 nov. 2011 à 14:43
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
0
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
0
solilog Messages postés 273 Date d'inscription samedi 13 juin 2009 Statut Membre Dernière intervention 18 avril 2015 10
5 févr. 2013 à 20:18
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
0
Rejoignez-nous