[firebase-br] SP para calculo de tempo entre duas datas Firebird 2.1 e 2.5
HPensador
hpensador em gmail.com
Seg Jun 20 13:15:43 -03 2011
Método para contagem de tempo entre 2 duas datas.
Obs.: Funciona normalmente nas versões 2.1 e 2.5 do Firebird
create or alter procedure tempo (
di date, --Data inicial
df date) --Data final
returns(
tanos integer, --Total de anos
tmeses integer,--Total de meses
tdias integer) --Total de dias
as
declare variable mes integer;
declare variable bisexto integer;
begin
tanos = datediff(year, :di, :df);
if (extract(month from :di) > extract(month from :df)) then
tanos = :tanos - 1;
if (extract(month from :df) < extract(month from :di)) then
tmeses = 12 - (extract(month from :di + extract(month from :df)));
else
tmeses = (extract(month from :df) - extract(month from :di));
if (extract(day from df) < extract(day from di)) then
begin
tmeses = tmeses - 1;
if (extract(month from :df) = extract(month from :di)) then
begin
tanos = tanos - 1;
tmeses = 11;
end
end
tdias = extract(day from :df) - extract(day from :di);
if (:tdias < 0) then
begin
mes = extract(month from :df) - 1;
if (:mes = 0) then mes = 12;
if (:mes = 1) then tdias = 31 + :tdias;
if (:mes = 2) then
begin
select resultado from ano_bisexto(extract(month from :df)) into
:bisexto;
if (:bisexto = 0) then
tdias = 28 + :tdias;
else
tdias = 29 + :tdias;
end
if (:mes = 3) then tdias = 31 + :tdias;
if (:mes = 4) then tdias = 30 + :tdias;
if (:mes = 5) then tdias = 31 + :tdias;
if (:mes = 6) then tdias = 30 + :tdias;
if (:mes = 7) then tdias = 31 + :tdias;
if (:mes = 8) then tdias = 31 + :tdias;
if (:mes = 9) then tdias = 30 + :tdias;
if (:mes = 10) then tdias = 31 + :tdias;
if (:mes = 11) then tdias = 30 + :tdias;
if (:mes = 12) then tdias = 31 + :tdias;
end
suspend;
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