[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