PDA

Ver la Versión Completa : Fecha y hora por separado como comparar


zugazua2001
21-05-2006, 01:37:34
Hola amigos del foro, tengo dos campos por separado uno es la hora y el otro es la fecha de la fichada de un empleado.

Existe algun modo de concatenar obtener la diferencia en horas de dos fichadas de un empleado de manera rapida.

Ejm:
fichada 1: hora: 05:05 fecha: 01/03/2006
fichada 2: hora: 12:06 fecha: 02/03/2006

Cant Horas: 31 horas 1 minuto.

Gracias por todo nuevamente.
Saludos

Lepe
21-05-2006, 10:32:03
¿por código delphi o SQL?

zugazua2001
22-05-2006, 03:34:38
Yo decia por codigo delphi.
Si podes orientame tambien con SQL.

Gracias por tu ayuda.

¿por código delphi o SQL?

luisgutierrezb
22-05-2006, 18:15:57
suponiendo que son variables TDateTime, en delphi seria

var
diferenciaDias:Integer;
diferenciaHoras:TDateTime;
begin
diferenciaDias := Trunc(fichada2) - Trunc(fichada1);
diferenciaHoras := Frac(fichada2) - frac(fichada1);

//para mostrar:
ShowMessage('diferencia en dias: ' + IntToStr(diferenciadias));
ShowMessage('diferencia en horas: ' + FormatDateTime('hh:nn:ss', diferenciahoras);
end;

Hola amigos del foro, tengo dos campos por separado uno es la hora y el otro es la fecha de la fichada de un empleado.

Existe algun modo de concatenar obtener la diferencia en horas de dos fichadas de un empleado de manera rapida.

Ejm:
fichada 1: hora: 05:05 fecha: 01/03/2006
fichada 2: hora: 12:06 fecha: 02/03/2006

Cant Horas: 31 horas 1 minuto.

Gracias por todo nuevamente.
Saludos

Lepe
22-05-2006, 18:19:34
Se me olvidó preguntar para qué base de datos (paradox, firebrid etc.). Para Firebird tienes este hilo (http://www.clubdelphi.com/foros/showthread.php?t=18192&highlight=DIFERENCIA+HORA) aunque da los minutos, tendrás que convertirlo.


por código delphi tienes varias opciones:
- Si lo tienes guardado como texto, intenta con TablaNombreCampo.AsDate, AsTime
Otra opción es concatenando la fecha y hora (como texto) y pasarsela a StrToDatetime
- Si no, usa EncodeDatetime, EncodeDate, RecodeTime, etc de la unidad DateUtils

Tendrás que hacerlo a mano, hoy no estoy muy inspirado, solo se me ocurre esto:

procedure Tform1.btn1Click(Sender: TObject);
var h,m:Word;
s:string;
begin
h := HoursBetween(Now,Now-5);
m := MinutesBetween(Now ,Now-5) - (h*60);// restamos las horas que han pasado

ShowMessage(IntToStr(h)+':'+IntToStr(m));
end;


Saludos

zugazua2001
22-05-2006, 18:55:46
Como en tantas otras oportunidades me han dado una mano.
Muchisimas gracias