Foros Club Delphi

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

ecfisa 24-11-2010 21:33:07

Dias360()
 
Hace aproximadamente un mes un compañero solicitó el código para calcular Dias360 tál como lo hace Excel u OpenOffice.
En ese momento realizé un código que funcionaba sólo con el método NASD, pero no contemplaba el método europeo.

Pongo a disposición el código que contempla ambos métodos:
Código Delphi [-]
function Dias360(FechaIni,FechaFin: TDate; NASD:Boolean): Integer;
var
  ai,mi,di,
  af,mf,df: Word;
begin
  DecodeDate(FechaIni, ai, mi, di);
  DecodeDate(FechaFin, af, mf, df);
  if NASD then // EEUU
  begin
    if (di = 31) or ((mi = 2)and(di > 27)) then di:= 30;
    if (df > 27)and(mf = 2) then df:= 30; 
    if (df = 31)and(di < 30) then
    begin
      Inc(mf);
      df:= 1;
    end
    else if df = 31 then
     df:= 30
  end
  else       // EUROPEO
  begin
    if (di = 31) or ((mi = 2)and(di > 27)) then di:= 30;
    if (df = 31) or ((mf = 2)and(df > 27)) then df:= 30;
  end;
  if Abs(af - ai) = 0 then
    Result:= (mf-mi)*30 + df-di
  else
    Result:= Abs(af-ai-1)*360 + 360-mi*30 + 30-di + 30*(mf-1) + df
end;

Un ejemplo de llamada:
Código Delphi [-]
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
   Panel1.Caption:=IntToStr(Dias360(dtPicker1.Date, dtPicker2.Date,
                          not Boolean(ComboBox1.ItemIndex)));
end;

Espero les sea de utilidad.


Saludos. :)

Casimiro Noteví 24-11-2010 22:41:19

Vamos a tener que crear un repositorio público de código :rolleyes:

ecfisa 24-11-2010 23:06:26

Cita:

Empezado por Casimiro Notevi (Mensaje 383185)
Vamos a tener que crear un repositorio público de código :rolleyes:

No sería mala idea... :rolleyes: :)

Aprovecho para decir que línea
Código Delphi [-]
    if (df > 27)and(mf = 2) then df:= 30;
subsana un error que pude detectar al ir cotejando los resultados de mi código con el OpenOffice.calc (ignoro si Excel también lo tiene
ya que no uso Microsoft Office). Es fácil de detectar ingresando por ejemplo: 28/02/2010 y 28/02/2011, nos arroja un resultado
de 358 días.

Saludos. :)


La franja horaria es GMT +2. Ahora son las 06:04:38.

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