Hola.
Mirá te documento el código que es la mejor manera que se me ocurre para explicarlo.
Creo que, como a mí, tener un calendario en la mano te va ayudar a entender como es la lógica de dias360.
Código Delphi
[-]
function Dias360(Des,Has: TDateTime): Integer;
var
dd,dm,dh,da: Integer;
begin
if DayOf(Des) = 31 then Des:= IncDay(Des, -1); if Abs(YearOf(Has)-YearOf(Des)) = 0 then begin
dd:= 30 - DayOf(Des);
dm:= (Abs(MonthOf(Des)-MonthOf(Has))-1)*30;
dh:= DayOf(Has);
Result:= dd + dm + dh;
end
else begin
da:= Abs(YearOf(Has)-YearOf(Des)-1)*360;
dd:= 360 - MonthOf(Des)*30;
dm:= (MonthOf(Has)-1)*30 + DayOf(Has);
dh:= 30 - DayOf(Des);
Result:= da + dd + dm + dh;
end
end;
A la reducción de la fórmula llegué simplemente reemplazando las variables por su equivalente, como por ejemplo en:
Código Delphi
[-]
Result:= dd + dm + dh
Result:= 30-DayOf(Des)+(Abs(MonthOf(Des)-MonthOf(Has))-1)*30+DayOf(Has)
Por último, los resultados los cotejé contra el OpenOffice.org.calc.
Saludos.