Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-08-2003
seken seken is offline
Miembro
 
Registrado: jun 2003
Posts: 83
Poder: 21
seken Va por buen camino
Question restar dos fechas

estimados
tengo el problema de restar dos fechas, y no encuentro una función que lo haga, hay alguna función?
hago esto:

function
var dias:Tdate;
begin
dias:=TableFecha2.asdatetime -
TableFecha1.asdatetime;
TableDias.AsInteger:=StrToInt(DatetoStr(dias));
end;

el error es: '23/10/1900 is no un valid integer value, y he restado
30/05/2004 - 07/08/2003.

Yo he restado en otras ocaciónes horas y no tuve problema, resto una con otra y funciona.
muchas gracias

Responder Con Cita
  #2  
Antiguo 15-08-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 24
__cadetill Va por buen camino
el error en que linea te lo da, en la resta o en la conversion de tipos?
Responder Con Cita
  #3  
Antiguo 15-08-2003
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
trata de hacerlo asi:
Código:
     TableDias.AsFloat := TableFecha2.asdatetime -
     TableFecha1.asdatetime;
Ensayalo, dejando tu campo TableDias entero y nos cuentas.
espero te funcione.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #4  
Antiguo 15-08-2003
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Smile

¡Buen día a todos!

Seken:

Las restas de fechas son algo sencillo. Recordar que el tipo de dato TDate (o TDateTime) es equivalente al tipo de dato Double, es decir un número de punto flotante.

Una fecha en formato TDate, es un número fraccionario donde la parte entera es la cantidad de días (transcurridos desde el 30 de diciembre de 1899).

Teniendo esto en cuenta, la siguiente resta nos debe dar como resultado la cantidad de días que transcurren desde Fech1, hasta Fech2:


Var
Fech1 :TDate;
Fech2 :TDate;
Dias :Integer;

Begin
Dias := Trunc (Fech2 - Fech1);


Nótese que se utiliza la función Trunc, para poder asignar el resultado a la variable Integer Dias. Debido a que Fech2 y Fech1 son valores de punto flotante, el resultado de la resta es también un valor de punto flotante (aunque sea un número entero), por lo cual, si queremos asignar el resultado a una variable Integer, tenemos que convertirlo a un valor entero (en este caso utilizando la función Trunc).

No parece haber necesidad de una función que reste fechas, ya que Trunc (Fecha1 - Fecha2) es hasta cierto punto suficiente. Sin embargo, al tratarse de valores TDateTime (donde los valores generalmente presentan una fracción que indica también la hora), la resta Trunc (Fecha1 - Fecha2) puede causar un efecto inesperado.

Considere el siguiente caso:


Var
FechHora1 :TDateTime;
FechHora2 :TDateTime;
Dias :Integer;

Begin
{ Suponiendo que FechaHora1 sea 10/ene/2003 12:00 PM y que FechHora2 sea 12/ene/2003 6:00 AM }
Dias := Trunc (FechHora2 - FechHora1);


La variable Dias quedaría con un valor de 1 en lugar de 2, ya que la resta de FechHora2 menos FechHora1 da un resultado de 1.75, que truncado (Trunc) es 1.

Teniendo esto en cuenta, la resta de las fechas contenidas en las anteriores variables TDateTime debería ser:


Dias := Trunc (FechHora2) - Trunc (FechHora1);


Para un servidor, esto justifica la creación de una función que devuelva la cantidad de días transcurridos entre dos fechas, tomando en cuenta que los parámetros dados a la función pueden ser valores TDate o TDateTime con parte fraccionaria (con hora incluída).

Probablemente dicha función será agregada en la siguiente versión de Interfaz GH.

Espero esto sea de utilidad, seguimos en contacto.

Al González.
Responder Con Cita
  #5  
Antiguo 16-08-2003
seken seken is offline
Miembro
 
Registrado: jun 2003
Posts: 83
Poder: 21
seken Va por buen camino
Thumbs up

Muc has gracias por toda la ayuda, ya lo probe y funciono correctamente de esta forma

TableDias.AsFloat := TableFecha2.asdatetime -
TableFecha1.asdatetime;

agradezco toda la explicacion teorica del proque de tipos Datatime, Tdata y otros.
Espero poder ayudar en una proxima duda

Saludos

Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 10:13:40.


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
Copyright 1996-2007 Club Delphi