[firebase-br] Contar tempo (anos, meses e dias)

HPensador hpensador em gmail.com
Seg Jun 20 09:51:54 -03 2011


Bom dia Colegas!

Tenho um relatório no meu sistema que é uma certidão de tempo de 
serviço, para calcular o tempo de serviço utilizo um método feito em 
pascal que recebe como paramentros a data inicial e final e me retorna a 
quantidade de anos, meses e dias. Como no delphi temos varios métodos 
nativos para manipulação de datas foi tranquila a criação deste método. 
Pórem agora eu gostaria de ter este método no Firebird (SP), já fiz uma 
pesquisa na net + não encontrei nada especifico. Algum colega que tenha 
algo neste sentido poderia compartilhar.

Abaixo o referido método em pascal:

function AnosMesesDias(DI, DF: TDateTime): String;
var
   TAnos, TMeses, TDias, M : Integer;
begin
   TAnos := YearOf(DF) - YearOf(DI);
   if MonthOf(DI) > MonthOf(DF) then
     TAnos := TAnos - 1;
   if MonthOf(DF) < MonthOf(DI) then
     TMeses := 12 - MonthOf(DI) + MonthOf(DF)
   else
     TMeses := MonthOf(DF) -  MonthOf(DI);
   if DayOf(DF) < DayOf(DI) then
   begin
     TMeses := TMeses - 1;
     if MonthOf(DF) = MonthOf(DI) then
     begin
       TAnos  := TAnos - 1;
       TMeses := 11;
     end;
   end;
   TDias := DayOf(DF) - DayOf(DI);
   if TDias < 0 then
   begin
     M := MonthOf(DF) - 1;
     if M = 0 then
       M := 12;
     Case M of
       1  : TDias := 31 + TDias;
       2  : begin
              if ( (YearOf(DF) mod 4 = 0) and (YearOf(DF) mod 100 <> 0) or
                 (YearOf(DF) mod 400 = 0) ) then
                TDias := 29 + TDias
              else
                TDias := 28 + TDias;
            end;
       3  : TDias := 31 + TDias;
       4  : TDias := 30 + TDias;
       5  : TDias := 31 + TDias;
       6  : TDias := 30 + TDias;
       7  : TDias := 31 + TDias;
       8  : TDias := 31 + TDias;
       9  : TDias := 30 + TDias;
       10 : TDias := 31 + TDias;
       11 : TDias := 30 + TDias;
       12 : TDias := 31 + TDias;
     end;
   end;
   Result := inttostr(TAnos) + ' ano(s), ' + inttostr(TMeses) + ' 
mes(es) e ' +
             inttostr(TDias) + ' dia(s)';
end;

-- 
[]'s,

Hélio Oliveira
Bel. Ciência da Computação
Técnico em Contabilidade
e-mail : hpensador em gmail.com
Skype : hpensador
http://hpensador.blogspot.com/
www.hpensador.net
(71) 9975-9176





Mais detalhes sobre a lista de discussão lista