Calculando dias corridos.

25/07/2023

0

Estou tentando criar um contador de dias corridos usando html, css e javascript.
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

Douglas Oliveira

Responder

Posts

26/07/2023

Frank Hosaka

Para mim, o resultado está correto
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>

Responder

26/07/2023

Frank Hosaka

Eu escrevi $ mas a listagem só mostra o $.
Responder

26/07/2023

Frank Hosaka

Eu escrevi Cifrão mas a listagem só mostra o Cifrão
Responder

26/07/2023

Frank Hosaka

Eu escrevi $ abre-chave resultado fecha-chave, mas só apareceu o $. Que coisa!
Responder

04/08/2023

Diego Marinho

Olá !
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 !
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar