PDA

Ver la Versión Completa : Restar dos fechas


Alejandrina
09-09-2008, 18:24:07
Hola a todos
Tengo la siguiente duda, quiero restar dos campos tipo Date pero no se como hacerlo. Las fechas son almacenadas en la tabla como 08/29/2008 08:32:55 a.m. Los campos son FECHAMONTAJE tipo Date y HORAINICIO tipo Date lo que quisiera lograr es
09/09/2008 11:51:02 a.m. – 09/09/2008 11:50:45 a.m. = 09/09/2008 00:00:17
Manejo Interbase y Delphi5...Gracias por la ayuda que me puedan brindar.:)

maeyanes
09-09-2008, 18:30:25
Hola...

Solo tienes que hacer la operación de resta, en Delphi podría ser algo como:


var
Fecha: TDateTime;

begin
Fecha := DataSet.FieldByName('FechaMontaje').AsDateTime - DataSet.FieldByName('HoraInicio').AsDateTime
end;


Y desde SQL solo tendrías que hacer algo como:


select FechaMontaje - HoraInicio Fecha, campo1, campo2 from tabla



Saludos...

Alejandrina
12-09-2008, 14:55:25
Hola,
No se que estoy haciendo mal :confused: eh seguido las instrucciones y me esta mostrando un error EOleError....'Variant does not reference an automation object'... el codigo que tengo es el siguiente:
procedure TFrmFinalizacionMontaje.RBFirmaMontadorClick(Sender: TObject);
var diferencia:TDateTime;
begin
if (userw<>'J704') or (userw<>'M800') or (userw<>'P705')or (userw<>'SYSDBA') then
begin
Dmsip2.TblFormatoFinalizacion.Edit;
Dmsip2.TblFormatoFinalizacion['FIRMAMONTAJES']:='X';
Dmsip2.TblFormatoFinalizacion['USUARIOMONTAJES']:=userw;
DBEUsuarioMontajes.Text:=userw;
DBEFechaMontador.Text:=DateTimeToStr(now);
EHoraMontajes.Text:=copy(DBEFechaMontador.Text,12,13);
Dmsip2.TblFormatoFinalizacion.Post;
diferencia:=DmSip2.TblFormatoFinalizacion['FECHAMONTAJES'].AsDateTime -
DmSip2.TblFormatoFinalizacion['HORAINICIO'].AsDateTime;
end

Ayuda!

gatosoft
23-09-2008, 14:53:14
Hola Alejandrina....

Creo que no es posible hacer esta diferencia del modo que lo palnteas... Si restas una fecha de otra, lo que te resulta es un número entero que indica los dias .... por tanto tu variable "diferencia" no puede ser TDateTime...

Recuerda que la mayoría de los sistemas tienen una fecha mínima de partida... creo que es 01/01/1900 (no se si sea el caso de Delphi)...

Bueno, el caso es que si restas 2008-09-23 de 2008-09-01 la diferencia será 22 (dias). Pero mira esto:

Si le restas (o sumas) un número entero a una fecha, obtienes una fecha..!!!

Puedes entonces hacer:


intdiferencia := FechaMayor - FechaMenor;
NuevaFecha := FechaMayor - intDiferencia;


Espero que te sirva, aunque un poco tarde....

Saludos,

Lepe
23-09-2008, 15:50:23
No entiendo muy bien lo que quieres obtener, pero te aconsejo usar las funciones de la unidad Dateutils:
- DaysBetween
- HoursBetween
- MinutesBetween
-MillisecondsBetween
- etc.

Otra forma, es usar los trucos de ClubDelphi, el buscador encuentra dos (http://www.clubdelphi.com/trucos/index.php?id=480&scroll=0&scrollb=324)

Saludos

Alejandrina
23-09-2008, 20:54:13
Hola a todos....muchas gracias por sus aportes me fueron de gran utilidad. En ultimas lo realice de la siguiente forma:
Dmsip2.TblFormatoPedido.Edit;
diferencia:=DmSip2.TblFormatoPedido['FECHAMONTAJES']- DmSip2.TblFormatoPedido['HORAINICIO'];
DecodeTime(diferencia, Hora, Min, Seg, Mili);
DBEDiferenciaMontador.Text:=IntToStr(Hora)+':'+IntToStr(Min)+':'+IntToStr(seg);
Dmsip2.TblFormatoPedido.Post;


Lo que aun sigo buscando es como hacer para que muestre cuando son mas de 24 horas... :confused: