Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Restar dos fechas (https://www.clubdelphi.com/foros/showthread.php?t=59804)

Alejandrina 09-09-2008 18:24:07

Restar dos fechas
 
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:

Código Delphi [-]
var
  Fecha: TDateTime;

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

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

Código SQL [-]
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:
Código Delphi [-]
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:

Código Delphi [-]
   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

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:
Código Delphi [-]
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:


La franja horaria es GMT +2. Ahora son las 08:50:39.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi