Calculando dias corridos.
25/07/2023
0
A síntese que tentei criar foi utilizando JavaScript para realizar o cálculo dos dias corridos, excluindo feriados pré-definidos e ajustando os resultados para evitar fins de semana.
Exemplo: Minha data inicial é 1/8/2023 somando + 13 dias e desconsiderando dia 14/8 e 15/8 que aqui para mim é feriado o resultado teria que ser: 16/8/2023, se caso o resultado caísse em fim de semana ele teria que considerar o próximo dia útil.
Quando clico em calcular o raio da soma está pulando os fim de semana e o resultado está dando 19-8-2023
Segue meu código: https://codepen.io/Dougcodepen/pen/XWyYVzW
Douglas Oliveira
Posts
26/07/2023
Frank Hosaka
01/08/23 - dia 1
02/08/23 - dia 2
03/08/23 - dia 3
04/08/23 - dia 4
05/08/23 - sábado
06/08/23 - domingo
07/08/23 - dia 5
08/08/23 - dia 6
09/08/23 - dia 7
10/08/23 - dia 8
11/08/23 - dia 9
12/08/23 - sábado
13/08/23 - domingo
14/08/23 - feriado
15/08/23 - feriado
16/08/23 - dia 10
17/08/23 - dia 11
18/08/23 - dia 12
19/08/23 - dia 13
Eu fiz até um código resumido:
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Calculadora de Dias Corridos</title> <script> function fimDeSemana(date){day=date.getDay(); return day===0||day===6} function feriado(date){ feriados=['2023-08-14','2023-08-15','2023-09-07'] dateString=date.toISOString().substr(0, 10) return feriados.includes(dateString)} function calculoDiasUteis() { dataInic = dataInicial.value; numDias = parseInt(numeroDias.value) contagem=0 dataAtual = new Date(dataInic) while (contagem < numDias) { dataAtual.setDate(dataAtual.getDate() + 1) if (!fimDeSemana(dataAtual) && !feriado(dataAtual)){contagem++;}} while (fimDeSemana(dataAtual) || feriado(dataAtual)) { dataAtual.setDate(dataAtual.getDate() + 1)} resultado=dataAtual.toISOString().substr(0, 10) dataFinal.innerHTML=`Data Final: $` dataInicial.value="" numeroDias.value=""} </script> <div style="width:500px;margin:0 auto"> <h2>Calculadora de Dias Corridos</h2> <h3>Teste: 2023-08-1 + 13 dias = 2023-08-19</h3> <table> <tr><td>Data Inicial:<td><input type=date id=dataInicial> <tr><td>Número de Dias:<td><input type=number id=numeroDias min="1" step="1"> <tr><td><button onclick=calculoDiasUteis()>Calcular</button> <tr><td><td id=dataFinal></table></div></head></html>
26/07/2023
Frank Hosaka
04/08/2023
Diego Marinho
Dei uma olhada no seu código na https://codepen.io/Dougcodepen/pen/XWyYVzW, acho que solução é simples :
Pelo que vc disse acima, vc só quer exclui da contagem os feriados, né ?
Mas veja essa parte do seu código :
if (!isWeekend(currentDate) && !isHoliday(currentDate)) { count++; }
Você excluiu da contagem o "isWeekend" , com isso ele tmb não conta quando é sábado e domingo, causando uma deformidade no resultado esperado.
A solução, pelo que vi, é só excluir o "!isWeekend(currentDate)" desse if, deixando somente o !isHoliday(currentDate) ...assim :
if ( !isHoliday(currentDate)) { count++; }
Vlw !
Clique aqui para fazer login e interagir na Comunidade :)