MATEMÁTICA APLICADA ⇒ Soma de diferença entre datas não confere Tópico resolvido
Moderador: [ Moderadores TTB ]
Fev 2016
01
14:56
Soma de diferença entre datas não confere
Tenho um cálculo que faz a diferença entre duas datas na seguinte ordem:
1-Diferença entre Data1 e Data2 (parametros: anos=365 e meses=30 dias), resultado em dia,mes,ano
2-Conversão do resultado para exibir em dias usando os mesmos parametros.
Conforme imagem a conversão dos periodos para dias está ok, a soma das colunas está ok, mas o resultado em dias da soma dos meses por extenso não confere.
1-Diferença entre Data1 e Data2 (parametros: anos=365 e meses=30 dias), resultado em dia,mes,ano
2-Conversão do resultado para exibir em dias usando os mesmos parametros.
Conforme imagem a conversão dos periodos para dias está ok, a soma das colunas está ok, mas o resultado em dias da soma dos meses por extenso não confere.
Editado pela última vez por alebarros em 01 Fev 2016, 14:56, em um total de 1 vez.
- csmarcelo
- Mensagens: 5114
- Registrado em: 22 Jun 2012, 22:03
- Última visita: 17-04-23
- Agradeceu: 355 vezes
- Agradeceram: 2801 vezes
Fev 2016
01
22:26
Re: Soma de diferença entre datas não confere
Olá, alebarros.
O problema ocorre quando você converte 12 meses em 1 ano.
De acordo com os seus parâmetros:
1 mês = 30 dias e, portanto, 12 meses = 360 dias
1 ano = 365 dias
Assim, quando você transforma 17 meses em 12+5 e "sobe o doze", está incluindo 5 dias na conta.
Solução: considere que um ano possui 360 dias.
O problema ocorre quando você converte 12 meses em 1 ano.
De acordo com os seus parâmetros:
1 mês = 30 dias e, portanto, 12 meses = 360 dias
1 ano = 365 dias
Assim, quando você transforma 17 meses em 12+5 e "sobe o doze", está incluindo 5 dias na conta.
Solução: considere que um ano possui 360 dias.
Fonte: Wikipédia.Ano comercial
Chama-se ano comercial o período de tempo em que se considera que o ano tem 360 dias e cada um dos meses 30 dias, indistintamente.
É utilizado na contabilidade e também na matemática financeira com o objetivo de simplificar os cálculos com datas.
Editado pela última vez por csmarcelo em 01 Fev 2016, 22:26, em um total de 1 vez.
Fev 2016
02
08:32
Re: Soma de diferença entre datas não confere
Obrigado csmarcelo pela atenção, mas acontece que não posso mudar essa regra, é a forma como é calculado o tempo de serviço do inss. Veja nesta imagem de um documento do Próprio instituto informando o tempo.
2 meses = 60 dias
1 dia
total = anos + meses + dias => 2251
Ano Comercial
6 anos = 2160 dias
2 meses = 60 dias
1 dia
total = anos + meses + dias => 2221
6 anos = 2190 dias2 meses = 60 dias
1 dia
total = anos + meses + dias => 2251
Ano Comercial
6 anos = 2160 dias
2 meses = 60 dias
1 dia
total = anos + meses + dias => 2221
Editado pela última vez por alebarros em 02 Fev 2016, 08:32, em um total de 1 vez.
- csmarcelo
- Mensagens: 5114
- Registrado em: 22 Jun 2012, 22:03
- Última visita: 17-04-23
- Agradeceu: 355 vezes
- Agradeceram: 2801 vezes
Fev 2016
02
10:19
Re: Soma de diferença entre datas não confere
Creio que, nesse caso, a forma mais simples de se resolver isso seja somar os períodos em dias e depois converter para o formato ano/mês/dia.
7954+4970 = 12924 = 35 anos, 4 meses, 29 dias
7954+4970 = 12924 = 35 anos, 4 meses, 29 dias
Fev 2016
02
16:31
Re: Soma de diferença entre datas não confere
Minha situação é que sempre vou ter duas datas:
Despois do resultado em dias como faço a conversão para dias,meses e anos?
16/12/1998
28/02/1977
---------------------
dias
como resolvo essa subtração retornando em dias?28/02/1977
---------------------
dias
Despois do resultado em dias como faço a conversão para dias,meses e anos?
Editado pela última vez por alebarros em 02 Fev 2016, 16:31, em um total de 1 vez.
- csmarcelo
- Mensagens: 5114
- Registrado em: 22 Jun 2012, 22:03
- Última visita: 17-04-23
- Agradeceu: 355 vezes
- Agradeceram: 2801 vezes
Fev 2016
03
07:14
Re: Soma de diferença entre datas não confere
Creio que você só precisa implementar agora volta (dias para ano/mês/dias), porque, pelo que eu entendi, o restante você já faz.
Segue algoritmo que calcula anos, meses e dias, tendo como parâmetro o total de dias.
Parâmetro de entrada: totalDias
anos = totalDias / 365
totalDias = totalDias - anos*365
meses = totalDias / 30
totalDias = totalDias - meses*30
dias = totalDias
Faça 1 e 2 para cada período. Depois, basta somar todas as quantidades de dias encontradas e aí fazer a volta, ou seja, no seu exemplo, converter 12924 para 35 anos, 4 meses, 29 dias.Tenho um cálculo que faz a diferença entre duas datas na seguinte ordem:
1-Diferença entre Data1 e Data2 (parametros: anos=365 e meses=30 dias), resultado em dia,mes,ano
2-Conversão do resultado para exibir em dias usando os mesmos parametros.
Segue algoritmo que calcula anos, meses e dias, tendo como parâmetro o total de dias.
Parâmetro de entrada: totalDias
anos = totalDias / 365
totalDias = totalDias - anos*365
meses = totalDias / 30
totalDias = totalDias - meses*30
dias = totalDias
Editado pela última vez por csmarcelo em 03 Fev 2016, 07:14, em um total de 1 vez.
Fev 2016
03
08:19
Re: Soma de diferença entre datas não confere
csmarcelo, desculpe minha ignorância mas não entendi como aplicar o algorítimo poderia dar um exemplo.
Parâmetro de entrada: totalDias = 12924
totalDias = 3
Parâmetro de entrada: totalDias = 12924
anos = 12924/365 = 35,40anos = totalDias / 365
totalDias = 12924 - (35,40 * 365)totalDias = totalDias - anos*365
totalDias = 3
Editado pela última vez por alebarros em 03 Fev 2016, 08:19, em um total de 1 vez.
- csmarcelo
- Mensagens: 5114
- Registrado em: 22 Jun 2012, 22:03
- Última visita: 17-04-23
- Agradeceu: 355 vezes
- Agradeceram: 2801 vezes
Fev 2016
03
11:27
Re: Soma de diferença entre datas não confere
Você deve arredondar para baixo. Esqueci desse detalhe.
Parâmetro de entrada: totalDias
anos = int(totalDias / 365)
totalDias = totalDias - anos*365
meses = int(totalDias / 30)
totalDias = totalDias - meses*30
dias = totalDias
----------------------------------------
totalDias = 12924
anos = int(12924 / 365) = 35
totalDias = 12924 - 35*365 = 149
meses = int(149 / 30) = 4
totalDias = 149 - 4*30 = 29
dias = 29
Parâmetro de entrada: totalDias
anos = int(totalDias / 365)
totalDias = totalDias - anos*365
meses = int(totalDias / 30)
totalDias = totalDias - meses*30
dias = totalDias
----------------------------------------
totalDias = 12924
anos = int(12924 / 365) = 35
totalDias = 12924 - 35*365 = 149
meses = int(149 / 30) = 4
totalDias = 149 - 4*30 = 29
dias = 29
Editado pela última vez por csmarcelo em 03 Fev 2016, 11:27, em um total de 1 vez.
Jun 2018
25
23:02
Re: Soma de diferença entre datas não confere
Olá ... vou tentar ajudar sem entrar muito a fundo no problema concernente ao INSS ...
Primeiro faça o cálculo correto da diferença em dias considerando dias bissextos e meses com seus dias corretos ...
Janeiro ... Fevereiro ... etc ... 31 (28|29) 31 30 31 30 31 31 30 31 30 31 ...
Para saber se um ano é bissexto deve-se dividi-lo por 4 ... se o resto da divisão for zero é um ano bissexto exceto 1900 que fevereiro não teve 29 dias ...
Para um cálculo mais rápido ... porém não muito preciso ... calcula a diferença de ANOS somente por 365,25 (onde este valor multiplicado por 4 acrescentará em 1 dia cada 4 anos que ocorrer dentro da diferença)
Depois disso procure adaptar esse resultado da diferença em dias nos moldes do INSS ...
Depois eu volto ...
Exemplo ...
28/02/1977 a 16/12/1998
(1998 - 1977) x 365,25 = 7670.25 ==> 7670
01/1977 ==> 31
28/1977 ==> 28 + 31 = 59
01/1998 ==> 31
02/1998 ==> 28 (1998 / 4 = 499.5 ==> não é ano bissexto porque tem resto diferente de zero)
03/1998 ==> 31
04/1998 ==> 30
05/1998 ==> 31
06/1998 ==> 30
07/1998 ==> 31
08/1998 ==> 31
09/1998 ==> 30
10/1998 ==> 31
11/1998 ==> 30
12/1998 ==> 16 + 31 + 28 + ... + 30 = 350 - 59 + 7670 = 7961 dias de diferença
7961 dias de diferença
Primeiro faça o cálculo correto da diferença em dias considerando dias bissextos e meses com seus dias corretos ...
Janeiro ... Fevereiro ... etc ... 31 (28|29) 31 30 31 30 31 31 30 31 30 31 ...
Para saber se um ano é bissexto deve-se dividi-lo por 4 ... se o resto da divisão for zero é um ano bissexto exceto 1900 que fevereiro não teve 29 dias ...
Para um cálculo mais rápido ... porém não muito preciso ... calcula a diferença de ANOS somente por 365,25 (onde este valor multiplicado por 4 acrescentará em 1 dia cada 4 anos que ocorrer dentro da diferença)
Depois disso procure adaptar esse resultado da diferença em dias nos moldes do INSS ...
Depois eu volto ...
Exemplo ...
28/02/1977 a 16/12/1998
(1998 - 1977) x 365,25 = 7670.25 ==> 7670
01/1977 ==> 31
28/1977 ==> 28 + 31 = 59
01/1998 ==> 31
02/1998 ==> 28 (1998 / 4 = 499.5 ==> não é ano bissexto porque tem resto diferente de zero)
03/1998 ==> 31
04/1998 ==> 30
05/1998 ==> 31
06/1998 ==> 30
07/1998 ==> 31
08/1998 ==> 31
09/1998 ==> 30
10/1998 ==> 31
11/1998 ==> 30
12/1998 ==> 16 + 31 + 28 + ... + 30 = 350 - 59 + 7670 = 7961 dias de diferença
7961 dias de diferença
Editado pela última vez por Rhaone em 25 Jun 2018, 23:23, em um total de 2 vezes.
-
- Tópicos Semelhantes
- Respostas
- Exibições
- Última mensagem
-
- 2 Respostas
- 634 Exibições
-
Última mensagem por 314159265
-
- 3 Respostas
- 1273 Exibições
-
Última mensagem por Cardoso1979
-
- 2 Respostas
- 1281 Exibições
-
Última mensagem por Leandrovisk
-
- 1 Respostas
- 4305 Exibições
-
Última mensagem por jedi
-
- 1 Respostas
- 1589 Exibições
-
Última mensagem por Carlosft57