Rotina de idade
Moderador: Moderadores
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Rotina de idade
Está rolando no harbour-users, sobre uma rotina de idade, uma minha e uma de outro usuário.
O outro usuário levantou uma situação, mas agora levantei outra.
É curiosa a situação:
Uma criança nasceu em 28/fevereiro/2023
Em 28/03 vai ter 1 mês
Em 29/03 vai ter 1 mês e 1 dia
Em 30/03 vai ter 1 mês e 2 dias
Em 31/03 vai ter 1 mês e 3 dias
Em 01/04 vai ter 1 mês e 1 dia
Em 01/04 ela ficou mais nova 2 dias !!!!
E aí ? o que dizem ?
E num cálculo financeiro ? será mais barato o juros dia 01 do que dia 31 ?
O outro usuário levantou uma situação, mas agora levantei outra.
É curiosa a situação:
Uma criança nasceu em 28/fevereiro/2023
Em 28/03 vai ter 1 mês
Em 29/03 vai ter 1 mês e 1 dia
Em 30/03 vai ter 1 mês e 2 dias
Em 31/03 vai ter 1 mês e 3 dias
Em 01/04 vai ter 1 mês e 1 dia
Em 01/04 ela ficou mais nova 2 dias !!!!
E aí ? o que dizem ?
E num cálculo financeiro ? será mais barato o juros dia 01 do que dia 31 ?
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
Rotina de idade
O que o outro usuário levantou foi uma situação oposta, tratada diferente pelas rotinasJoséQuintas escreveu:O outro usuário levantou uma situação, mas agora levantei outra.
31/01 a 28/02
31/01 a 01/03
Na minha rotina acontece parecido com a anterior, onde 31/01 a 28/02 acusa 1 mês e 3 dias, e em 01/03 um mês e 1 dia.
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
Rotina de idade
Acho que vai ser melhor manter como 1 mês até dia 31.JoséQuintas escreveu:Uma criança nasceu em 28/fevereiro/2023
Em 28/03 vai ter 1 mês
Em 29/03 vai ter 1 mês e 1 dia
Em 30/03 vai ter 1 mês e 2 dias
Em 31/03 vai ter 1 mês e 3 dias
Em 01/04 vai ter 1 mês e 1 dia
Em 01/04 ela ficou mais nova 2 dias !!!!
E aí ? o que dizem ?
E num cálculo financeiro ? será mais barato o juros dia 01 do que dia 31 ?
Ninguém vai reclamar de ter até 4 dias de festa!!!
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
Rotina de idade
O problema está no conceito de mês.
Quando dizemos 1 mês e 1 dia estamos considerando o mesmo dia, só que no mês subsequente somado de 1 dia.
Olha o exemplo usando AddMonth() da hb_ct
Quando dizemos 1 mês e 1 dia estamos considerando o mesmo dia, só que no mês subsequente somado de 1 dia.
Olha o exemplo usando AddMonth() da hb_ct
Código: Selecionar todos
*/
PROCEDURE Main
? "Add 1 month to 2020-02-28", AddMonth( STOD("20200228") , 1 ) // 2020-03-28
? "Add 1 month to 2020-02-29" , AddMonth( STOD("20200229") , 1 ) // 2020-03-29
? "Add 2 months to 2020-02-28" , AddMonth( STOD("20200228") , 2 ) // 2020-04-28
RETURN
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Rotina de idade
Uma comparação entre as duas rotinas.
Destaquei aonde a diferença está maior.
Destaquei aonde a diferença está maior.
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
Rotina de idade
Pegando na tabela: de 04/janeiro/2020 a 03/março/2023
nos dois dá 3 anos e 1 mês
mas na minha dá 30 dias, na outra 27 dias.
a minha considera 31 - 4 = 27 dias de janeiro + 3 de março
a outra... sei lá...
nos dois dá 3 anos e 1 mês
mas na minha dá 30 dias, na outra 27 dias.
a minha considera 31 - 4 = 27 dias de janeiro + 3 de março
a outra... sei lá...
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
- clodoaldomonteiro
- Usuário Nível 4

- Mensagens: 821
- Registrado em: 30 Dez 2006 13:17
- Localização: Teresina-PI
- Contato:
Rotina de idade
Olá Fernando.
Tem essa aqui do Quintas:
Abraços.
Tem essa aqui do Quintas:
Código: Selecionar todos
/////////////////////////////////////////////////////////////////////////////
FUNCTION ZE_Idade( dDataNasc, dDataCalc )
LOCAL nDias, nMeses, nAnos
If dDataCalc = NIL
dDataCalc := Date()
Endif
IF Dtoc( dDataNasc ) == " / / "
RETURN 0
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 { nAnos, nMeses, nDias }
FUNCTION Last_Day( dData )
dData += ( 40 - Day( dData ) )
dData -= Day( dData )
RETURN dData
At. Clodoaldo Monteiro
Linguagens: Clipper / Harbour
Área de Atuação: Sistemas de gestão para Prefeituras Municipais
Fones: (86)3223-0653, 98859-0236
www.simplesinformatica.com.br
Linguagens: Clipper / Harbour
Área de Atuação: Sistemas de gestão para Prefeituras Municipais
Fones: (86)3223-0653, 98859-0236
www.simplesinformatica.com.br
-
Softwhouse
- Usuário Nível 3

- Mensagens: 324
- Registrado em: 07 Dez 2011 18:44
- Localização: Porto Alegre/RS
Rotina de idade
Olá Clodoaldo,
Obrigado, essa eu já tenho, queria ver o fonte para conferir os cálculos.
Abraços
Obrigado, essa eu já tenho, queria ver o fonte para conferir os cálculos.
Abraços
Fernando
-
Softwhouse
- Usuário Nível 3

- Mensagens: 324
- Registrado em: 07 Dez 2011 18:44
- Localização: Porto Alegre/RS