Difference entre deux dates en format heures

Signaler
-
Messages postés
420
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
6 mai 2019
-
bonjour,
je develloppe une petite application, je voudrais avoir la difference entre deux dates en heure, j'ai essayé la fonction beetween date...etc mais ca marche pas, si vous pouvez m'orientez aussi pour le choix des composants, après je dois voir si l'heure et supérieur à 21heure et inferieur à 5 heure je dois avoir le montant*2 ainsi que les jours fériés et les vendredi, merci pour votre aide, je suis vraiment novice dans la programmation,

6 réponses

Messages postés
273
Date d'inscription
samedi 13 juin 2009
Statut
Membre
Dernière intervention
18 avril 2015
10
Bonjour,

soit dat1, dat2 :tdatetime;

var heures :  double;
...
dif := (dat1-dat2)/24;


C'est tout facile.
solilog
Messages postés
420
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
6 mai 2019
16
Salut,

Je verrais plutôt une multiplication par 24, genre :
DiffHours := (DateTimeNow - DateTimeThen) * 24;
Messages postés
273
Date d'inscription
samedi 13 juin 2009
Statut
Membre
Dernière intervention
18 avril 2015
10
Bjr,
Suis vraiment pas fier, mille excuses, oui tu as raison.
Mais qu'est-ce que j'ai f... hier soir. Oups,
Evidemment (d1-d2)*24;

solilog
Messages postés
420
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
6 mai 2019
16
Bonjour,

Bah... une bonne nuit de sommeil, et hop !
J'ai testé ce code, et à priori ça fonctionne correctement :
function HoursBetween(const DateTimeThen, DateTimeNow: TDateTime): Integer;
begin
  Result := Trunc((DateTimeNow - DateTimeThen) * 24);
end;

Si DateTimeThen est plus grand que DateTimeNow, le résultat est négatif.
Ça fonctionne à la milliseconde près.
Messages postés
420
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
6 mai 2019
16
Je viens tester à nouveau mon code (j'ai rien d'autre à faire) :
const
  HOURS_PER_DAY = 24;

function HoursBetween(const DateTimeThen, DateTimeNow: TDateTime): Integer;
begin
  Result := Trunc((DateTimeNow - DateTimeThen) * HOURS_PER_DAY);
end;

procedure TForm1.Button1Click(Sender: TObject);
const
  sDateQuestion = '07/03/13 15:15:18';
var
  DateQuestion: TDateTime;
  DateMaintenant: TDateTime;
  DifferenceDateEnHeures: Integer;
begin
  DateQuestion := StrToDateTime(sDateQuestion);
  DateMaintenant := Now;
  DifferenceDateEnHeures := HoursBetween(DateQuestion, DateMaintenant);
  Memo1.Text := Format('La question a été posée il y a maintenant %d heures', [DifferenceDateEnHeures]);
  if DifferenceDateEnHeures > HOURS_PER_DAY * 15 then
    Memo1.Lines.Append('La réponse à la question ne présentait visiblement pas un caractère d''urgence !');
end;


La question a été posée il y a maintenant 3074 heures
La réponse à la question ne présentait visiblement pas un caractère d'urgence !
Messages postés
420
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
6 mai 2019
16
Une erreur s'est glissée dans mon code précédent :
la constante contenant la date de la question est inversée (jour/mois).

Voici la correction (j'ai un peu triché au passage afin qu'il produise le résultat désiré)
Donc :
const
  HOURS_PER_DAY = 24;

function HoursBetween(const DateTimeThen, DateTimeNow: TDateTime): Integer;
begin
  Result := Trunc((DateTimeNow - DateTimeThen) * HOURS_PER_DAY);
end;

procedure TForm1.Button1Click(Sender: TObject);
const
  sDateQuestion = '03/07/13 15:15:18';
var
  DateQuestion: TDateTime;
  DateMaintenant: TDateTime;
  DifferenceDateEnHeures: Integer;
begin
  DateQuestion := StrToDateTime(sDateQuestion);
  DateMaintenant := Now;
  DifferenceDateEnHeures := HoursBetween(DateQuestion, DateMaintenant);
  Memo1.Text := Format('La question a été posée il y a maintenant %d heures.', [DifferenceDateEnHeures]);
  if DifferenceDateEnHeures > HOURS_PER_DAY * 10 then
    Memo1.Lines.Append('La réponse à cette question ne présentait donc pas un caractère d''urgence !');
end;

Et voici ce que le Memo affiche après avoir cliqué sur le Button :
La question a été posée il y a maintenant 246 heures.
La réponse à cette question ne présentait donc pas un caractère d'urgence !