Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Diferencia de fechas (https://www.clubdelphi.com/foros/showthread.php?t=53214)

CFPA86 14-02-2008 04:12:04

Diferencia de fechas
 
Hola, amigos foristas
Estoy usando esta funcion para buscar la diferncia de dos fechas, dicha funcion fue puesta por Dec en el club.

Código Delphi [-]
function DifDate(FechaInicio, FechaTermino: TDateTime): String;
Var
   fYear,fMonth,fDay,iYear,iMonth,iDay,dYear,dMonth,dDay: Integer;
begin
   fYear :=Year(FechaTermino);
   fMonth:=Month(FechaTermino);
   fDay :=Day(FechaTermino);
   iYear :=Year(FechaInicio);
   iMonth:=Month(FechaInicio);
   iDay :=Day(FechaInicio);
   dYear:=fYear-iYear;

   if fMonth then      -------             Cual es la pregunta?
    begin
       dMonth:=fMonth+12-iMonth;
       dYear:=dYear-1;
    end
   else
    dMonth:=fMonth-iMonth;

    if fDay then  ---------                  Cual es la pregunta?
    begin
      dMonth:=dMonth-1;
      if (fMonth-1=1) or (fMonth-1=3) or (fMonth-1=5) or (fMonth-1=7) then
         fDay:=fDay+31
      else
          if (fMonth-1=8) or (fMonth-1=10) or (fMonth-1=12) or (fMonth-1=0) then
             fDay:=fDay+31
          else
              if (fMonth-1=4) or (fMonth-1=6) or (fMonth-1=9) or (fMonth-1=11) then
                 fDay:=fDay+30
              else
                 fDay:=fDay+28;
    end;
    if dMonth<0 then
    begin
       dYear:=dYear-1;
      dMonth:=11;
    end;
    dDay:=fDay-iDay;
    Result:=IntToStr(dYear)+'/'+IntToStr(dMonth)+'/'+IntToStr(dDay);
end;

No entiendo que va en (Cual es la pregunta?) alguien me podria colaborar.
Gracias.

dec 14-02-2008 04:16:47

Hola,

No me suena haber escrito ese código, debes haberlo tomado de los trucos, que subí algunos en su día de que no era autor. En todo caso, creo que las condiciones que te preocupan en realidad "preguntan" si la variable en cuestión vale "cero", puesto que de ser así la condición se evaluaría como "False", y, de no ser "cero", se evaluaría como "True", si no me equivoco. ;)

CFPA86 14-02-2008 04:50:34

Gracias Dec por contestarme tan rapido, pero esto no me da igualando las dos preguntas a cero, como dices, no se como hacerlo.

dec 14-02-2008 04:53:53

Hola,

Un momento. Yo no dije que tuvieras que tocar el código para nada, sino que, la condición:

Código Delphi [-]
if fMonth then
begin

end;

Implicaba que para entrar en ella "fMonth" debería valer algo "distinto de cero". ;)

Eso es lo único que he dicho o que quería decir. Prueba con el código "original" a ver.

CFPA86 14-02-2008 05:22:55

Ok Dec, no toco el codigo para nada, pero te pregunto como lo compilo si al hacerlo me saca un error diciendo que el tipo de esa linea debe de ser booleano.

dec 14-02-2008 05:28:58

Hola,

Ahora lo comprendo. Debe haber alguna opción en Delphi que permita tomar esas condiciones como booleanas, de modo que si esta opción no está activada... el programa no compila. Bueno. Pero en realidad ya he comentado una posible solución:

Código Delphi [-]
if (fMonth <> 0) then
begin

end;

if (fDay <> 0) then
begin

end;

CFPA86 14-02-2008 18:58:47

Hola a todos mi solucion fue, si le interesa a alguien

Var
x,y:TDateTime;
Resultado:Integer;
Begin
x := EncodeDate(2005, 12, 25); //es año, mes, dia en la codificacion
y := EncodeDate(2005, 11, 22);
Resultado := Trunc(x) - Trunc(y); //resultado debe tener 33
...
End;

Codigo escrito por Luisgutierrezzb del foro, gracias a todos y especialmente a Dec.
Chauuuuuu


La franja horaria es GMT +2. Ahora son las 00:52:06.

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