Ver Mensaje Individual
  #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
Reputación: 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