[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