PDA

Ver la Versión Completa : ¿como restar horas a un datetime?


JXJ
18-10-2010, 05:25:00
¿como se restan horas con un date time?

si tengo la fecha y la hora en un datetime
como puedo restarle 2 horas. 3 horas.

o sumarle / restarle horas . minutos. seg. dias. meses años??

ecfisa
18-10-2010, 05:48:31
Hola JXJ.

Usá la función IncHour de la unit DateUtils.

En el ejemplo que te hice se le restan cuatro horas a la hora actual:

...
uses DateUtils;

procedure TForm1.Button1Click(Sender: TObject);
var
MDate: TDateTime;
Horas: Integer;
begin
MDate:= Now;
Horas:= 4; // Nro de horas
MDate:= IncHour(MDate, - Abs(Horas)); // Abs, por si Horas < 0
end;


Saludos. :)

ecfisa
18-10-2010, 07:58:36
Hola de nuevo JXJ.

No presté atención a la última parte de tu texto:
o sumarle / restarle horas . minutos. seg. dias. meses años??

Con esta función creo que solucionas todo:

procedure SumaRestaDateTime(var ADateTime: TDateTime; dd, mm, aa, h, m, s: Integer);
begin
ADateTime:= IncYear(AdateTime, aa);
AdateTime:= IncMonth(AdateTime, mm);
AdateTime:= IncDay(AdateTime, dd);
AdateTime:= IncHour(AdateTime, h);
AdateTime:= IncMinute(ADateTime, m);
AdateTime:= IncSecond(AdateTime, s);
end;


Ejemplos de uso:

var
MDateTime: TDateTime;
begin
SumaRestaDateTime(MDateTime, -1, -1, -1, -1, -1, -1); // Resta: 1 día, 1 mes, 1 año, 1 hr, 1 min, 1seg
SumaRestaDateTime(MDateTime, 1, 1, 1, 1, 1, 1); // Suma: 1 día, 1 mes, 1 año, 1 hr, 1 min, 1seg
SumaRestaDateTime(MDateTime, -1, 0, 0, 0, -1, 5); // Resta: 1dia y 1 min. Suma 5 seg
end;


Saludos. :)

darkbits
10-06-2016, 19:16:59
revivo este hilo despues de año porque en DX10

el unico que funciona es:
AdateTime:= IncMonth(AdateTime, mm);

estas ya no funcionan o talvez las cambiaron alguien me puede dar una ayuda? como trabajar en DX10

ADateTime:= IncYear(AdateTime, aa);
AdateTime:= IncDay(AdateTime, dd);
AdateTime:= IncHour(AdateTime, h);
AdateTime:= IncMinute(ADateTime, m);
AdateTime:= IncSecond(AdateTime, s);