Cálculo da idade em meses e dias
Moderador: Moderadores
Cálculo da idade em meses e dias
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. :?
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. :?
eu fiz isto anos atraz usa lib catools
Código: Selecionar todos
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
Harbour + Minigui + dbfcdx
Marinas-Gui Pena que parou o suporte
-
Softwhouse
- Usuário Nível 3

- Mensagens: 324
- Registrado em: 07 Dez 2011 18:44
- Localização: Porto Alegre/RS
Cálculo da idade em meses e dias
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
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Cálculo da idade em meses e dias
Código: Selecionar todos
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 mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Cálculo da idade em meses e dias
Precisa desta
Código: Selecionar todos
FUNCTION Last_Day( dData )
dData += ( 40 - Day( dData ) )
dData -= Day( dData )
RETURN dData
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
-
Softwhouse
- Usuário Nível 3

- Mensagens: 324
- Registrado em: 07 Dez 2011 18:44
- Localização: Porto Alegre/RS
Cálculo da idade em meses e dias
Perfeito Quintas, funcionou corretamente. Função super enxuta e compilada com -w3 -es2.
Muito obrigado.
Muito obrigado.
Fernando
