Clipper On Line • Ver Tópico - Cálculo da idade em meses e dias

Cálculo da idade em meses e dias

Discussão sobre a linguagem CA-Clipper.

Moderador: Moderadores

 

Cálculo da idade em meses e dias

Mensagempor simoreira » 20 Ago 2004 16:27

Pessoal!

Necessito de uma fórmula para, informadas duas datas, calcular a idade em meses e dias. Por exemplo: Data Base: 01/09/2004 e Data nascimento 02/09/2003. A idade correta seria 8 meses e 29 dias. :?
simoreira
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 39
Data de registro: 20 Ago 2004 16:21
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Mensagempor Daniel » 21 Ago 2004 11:26

eu fiz isto anos atraz usa lib catools

Set Date To British
Set Epoch to 1950
Set Century On
While .t.
   cls
   xdata:= date()
   xnasc:= CToD(Space(8))
   @ 12, 10 Say "Data de Nascimento:" Get xnasc
   @ 14, 10 Say "Data Base.........." get xdata
   Read
   If LastKey() == 27
      Exit
   EndIf
   x6:= xdata - xnasc
   x9:= x8:= x5:= 0
   x11:= xnasc
   While x6 >= 365
      If isleap(x11) //verefica se o ano e bissesto
         If x6 > 0
           xc:= 366
           x6-= xc
           x11+= xc
           x8 ++
         EndIf
      Else
        If x6 > 0
            xc:= 365
            x6-= xc
            x11+= xc
            x8 ++
         EndIf
      EndIf
      If x6 < 0
         x6+= xc
         x8 --
         Exit
      EndIf
   End
   xa:= Day(xnasc)
   xd:= Day(xdata)
   ? StrZero(x8, 2) + " Anos"
   x7:= Int(x6 / 30)
   x20:= AddMonth(xdata , -x7) // diminui os meses
   If x6 >= 30
      While .t.
         x5++
         x2:= x20 + x5
         x3:= lastdayom(x2) //verefica se o mes e 30 ou 31 dias
         x6-= x3
         If x6 < 0
            x6+= x3
            x9:= x6
            x5--
            Exit
         EndIf
      End
   EndIf
   ?  StrZero(x5, 2) + " Meses"
   If x6 >= 0
      x9:= xd - xa
      If x9 < 0
         x9:= 30 - (x9 * -1)
      EndIf
   Else
      x9:= x6
   EndIf
   ? StrZero(x9, 2) + " Dias"
   Inkey(0)
End

Daniel

Harbour + Minigui + dbfcdx
Marinas-Gui Pena que parou o suporte
Avatar de usuário

Daniel
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 373
Data de registro: 13 Ago 2003 22:42
Cidade/Estado: Apucarana - PR
Curtiu: 0 vez
Mens.Curtidas: 36 vezes

Mensagempor simoreira » 21 Ago 2004 15:14

Daniel,

Muitíssimo obrigado. Precisando, estou às dordens.

Sérgio.
simoreira
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 39
Data de registro: 20 Ago 2004 16:21
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Cálculo da idade em meses e dias

Mensagempor Softwhouse » 20 Out 2021 23:07

Esta rotina apresenta um bug. Se digitar a data de nascimento 20/10/2020 e a data base 20/10/2021 calcula errado. Alguém teria essa função funcionando ?
Fernando
Softwhouse
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 300
Data de registro: 07 Dez 2011 17:44
Cidade/Estado: Porto Alegre/RS
Curtiu: 0 vez
Mens.Curtidas: 12 vezes

Cálculo da idade em meses e dias

Mensagempor JoséQuintas » 21 Out 2021 07:14

FUNCTION Idade( dDataNasc, dDataCalc )

   LOCAL nDias, nMeses, nAnos

   hb_Default( @dDataCalc, Date() )
   IF Dtoc( dDataNasc ) == "  /  /  "
      RETURN "*Indefinido*"
   ENDIF
   nAnos := Year( dDataCalc ) - Year( dDataNasc )
   IF Substr( Dtos( dDataCalc ), 5 ) < Substr( Dtos( dDataNasc ), 5 )
      nAnos := nAnos - 1
   ENDIF
   nMeses := ( 12 - Month( dDataNasc ) ) + Month( dDataCalc )
   DO CASE
   CASE Day( dDataCalc ) = Day( dDataNasc )
      nDias := 0
   CASE Day( dDataCalc ) < Day( dDataNasc )
      nMeses := nMeses - 1
      nDias  := Day( Last_Day( dDataNasc ) ) - Day( dDataNasc ) + Day( dDataCalc )
   OTHERWISE
      nDias := Day( dDataCalc ) - Day( dDataNasc )
   ENDCASE
   nMeses = Mod( nMeses, 12 )

   RETURN LTrim( Str( nAnos, 3 ) ) + " ano(s), " + LTrim( Str( nMeses, 3 ) ) + " mes(es), " + LTrim( Str( nDias, 3 ) ) + " dia(s)"

José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18014
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Cálculo da idade em meses e dias

Mensagempor JoséQuintas » 21 Out 2021 07:17

Precisa desta

FUNCTION Last_Day( dData )

   dData += ( 40 - Day( dData ) )
   dData -= Day( dData )

   RETURN dData
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18014
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Cálculo da idade em meses e dias

Mensagempor Softwhouse » 21 Out 2021 09:31

Perfeito Quintas, funcionou corretamente. Função super enxuta e compilada com -w3 -es2.
Muito obrigado.
Fernando
Softwhouse
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 300
Data de registro: 07 Dez 2011 17:44
Cidade/Estado: Porto Alegre/RS
Curtiu: 0 vez
Mens.Curtidas: 12 vezes




Retornar para CA-Clipper

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 6 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro