Only allow to select two days ahead

1

I would like a javascript function that would allow me to select only two days ahead of the current one. example: today is 06/28/2018 it allows me to select from day 3, because it would count day 29/06 as 1st day, would skip weekend and would count day 2 as the 2nd day, then release select from day 3

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script><htmllang="en">
  <head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    <!-- Bootstrap CSS -->
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">

    <title>Hello, world!</title>
  </head>
  <body>

									<div class="panel panel-default" id="panel_dadosdasolicitacao">
							<div class="panel-heading ">
								<h3 class="panel-title">
									<b>Dados da solicitação</b>
								</h3>
							</div>
							<div class="panel-body">
							<div class="row">
              <div class="col-md-3 form-group">	
              <label for="texto_3">Texto</label>	
              
              <input type="date" class="form-control">
              </div>
              </div>
              </div>
						</div>
					
					

    <!-- Optional JavaScript -->
    <!-- jQuery first, then Popper.js, then Bootstrap JS -->
    <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js"integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
    
    <script>
    
    
    </script>
    
  </body>
</html>
    
asked by anonymous 29.06.2018 / 00:18

2 answers

3
  • You can use the min attribute to restrict the dates that can be chosen by the user
  •    var hoje = new Date();
       var d1 = hoje.getDay();
       
       // os valores de d1 representam os dias da semana.
       // se for  sexta (5) ou sabado (6) 
       if(d1 == 5){
          dias += 2;
       }else if(d1 == 6){
          dias += 1;
       }else{
          dias = 3;
       }
    
    
    var today = new Date();
    today.setDate(today.getDate() + dias); //Voalá
    today = today.toISOString().split('T')[0];
    
    document.getElementsByName("date")[0].setAttribute('min', today);
    <input type="date" id="no-spin" onkeypress="return false" name="date"  min="">
  • Adding this line document.getElementById('txtDat').value= ""; to the code of dvd
  •    
    function validadata(d){
       var data = d.value; // pega o valor do input
       data = data.replace(/\//g, "-"); // substitui eventuais barras (ex. IE) "/" por hífen "-"
       var data_array = data.split("-"); // quebra a data em array
       var dia = data_array[2];
       var mes = data_array[1];
       var ano = data_array[0];
    
       // para o IE onde será inserido no formato dd/MM/yyyy
       if(data_array[0].length != 4){
      dia = data_array[0];
      mes = data_array[1];
      ano = data_array[2];
       }
    
       var hoje = new Date();
       var d1 = hoje.getDate();
       var m1 = hoje.getMonth();
       var a1 = hoje.getFullYear();
    
       var d1 = new Date(a1, m1, d1);
       var d2 = new Date(ano, mes-1, dia);
    
       var diff = d2.getTime() - d1.getTime();
       diff = diff / (1000 * 60 * 60 * 24);
       
       var dias = 3; // número de dias pra frente
       var a = (d1.getDay()+1)%7; // dia da semana de hoje+1
       var da = (d1.getDay()+3)%7; // dia da semana de hoje+3
    
       // se for 6 (sábado) ou 0 (domingo)
       if(a == 6 || da == 6 || da == 0){
      dias += 2;
       }else if(a == 0){
      dias += 1;
       }
    
       if(diff < dias){
      document.getElementById('txtDat').value= "";
      console.log("Apenas data a partir do 3º dia");
       }else{
      console.log("Data válida!");
       }
    }
    <input type="date" id="txtDat" onchange="validadata(this)">
        
    29.06.2018 / 03:28
    2

    This function does this check (explanations in code):

    function validadata(d){
       var data = d.value; // pega o valor do input
       data = data.replace(/\//g, "-"); // substitui eventuais barras (ex. IE) "/" por hífen "-"
       var data_array = data.split("-"); // quebra a data em array
       var dia = data_array[2];
       var mes = data_array[1];
       var ano = data_array[0];
    
       // para o IE onde será inserido no formato dd/MM/yyyy
       if(data_array[0].length != 4){
          dia = data_array[0];
          mes = data_array[1];
          ano = data_array[2];
       }
    
       var hoje = new Date();
       var d1 = hoje.getDate();
       var m1 = hoje.getMonth();
       var a1 = hoje.getFullYear();
    
       var d1 = new Date(a1, m1, d1);
       var d2 = new Date(ano, mes-1, dia);
    
       var diff = d2.getTime() - d1.getTime();
       diff = diff / (1000 * 60 * 60 * 24);
       
       var dias = 3; // número de dias pra frente
       var a = (d1.getDay()+1)%7; // dia da semana de hoje+1
       var da = (d1.getDay()+3)%7; // dia da semana de hoje+3
    
       // se for 6 (sábado) ou 0 (domingo)
       if(a == 6 || da == 6 || da == 0){
          dias += 2;
       }else if(a == 0){
          dias += 1;
       }
    
       if(diff < dias){
          console.log("Apenas data a partir do 3º dia");
       }else{
          console.log("Data válida!");
       }
    }
    <input type="date" id="txtDat" onchange="validadata(this)">
        
    29.06.2018 / 01:52