PDA

Ver la Versión Completa : Diferencia de fechas


CFPA86
14-02-2008, 04:12:04
Hola, amigos foristas
Estoy usando esta funcion para buscar la diferncia de dos fechas, dicha funcion fue puesta por Dec en el club.


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:


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:


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