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

Eduardo Jedliczka edujed em gmail.com
Seg Jun 20 10:44:41 -03 2011


Se estiver utilizando o Firebird 2.1 (ou maior) veja este link:

http://www.firebirdsql.org/refdocs/langrefupd21-intfunc-datediff.html

Aí fica fácil, faça a conta com anos, meses (mod 12) e só faça
pequenas verificações quanto aos "dias".

abraço.

==========================
Eduardo Jedliczka
Apucarana - Pr
==========================




Em 20 de junho de 2011 09:51, HPensador <hpensador em gmail.com> escreveu:
> 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
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>




Mais detalhes sobre a lista de discussão lista