Ir para conteúdo
Fórum Script Brasil
  • 0

Somar 180 a uma data


lm1979

Pergunta

Boa tarde a todos,

Estou com a seguinte situação.

- No meu formulário tem um input tipo data onde eu informo da data de emissão do ASO, um select onde eu escolho o prazo de validade do ASO.

Eu quero somar um determinado número de dias a minha data de emissão para obter a data final da validade do ASO.

Exemplo:

30/01/2012 + 180 dias.

<div class="form-group col">
  <label for="txtValidade">Validade</label>
  <select class="form-control" id="txtValidade" name="txtValidade">
    <option value='0'>6 Meses</option>
    <option value='1'>1 Ano</option>
    <option value='2'>2 Anos</option>
  </select>
</div>
<div class="form-row">
  <div class="form-group col">
    <label for="txtDtEmissaoASO">Data da Emissão do ASO</label>
    <input type="date" class="form-control" id="txtDtEmissaoASO" name="txtDtEmissaoASO" required="required">
  </div>
  <div class="form-group col">
    <label for="txtDtValidadeASO">Data da Validade do ASO</label>
    <input type="date" class="form-control" id="txtDtValidadeASO" name="txtDtValidadeASO" required="required">
  </div>
</div>
<div class="form-row">
  <div class="form-group col">
    <label for="txtFuncionario">Nome do Funcionário</label>
    <input type="text" class="form-control" id="txtFuncionario" name="txtFuncionario" required="required" pattern="^[a-zA-ZÀ-ú\s]+$" placeholder="Nome do Funcionário">
  </div>
  <div class="form-group col">
    <label for="txtEmpresa">Nome da Empresa</label>
    <input type="text" class="form-control" id="txtEmpresa" name="txtEmpresa" required="required" placeholder="Nome da Empresa" onblur="calcular()">
  </div>
</div>

Segue a função Javascript.

<script>
    function calcular(){
        var valor = Number(document.getElementById("txtValidade").value);
        var dias = 0;
        var dataAtual = new Date(document.getElementById("txtDtEmissaoASO").value);
        var novaData = new Date();
        switch(valor){
            case 0:
            dias = 180;
            break;
            case 1:
            dias = 365;
            break;
            case 2:
            dias = 730;
            break;
        }
        novaData.setDate(dataAtual.getDate() + dias);
        var exibirData = dataAtual.getDate() + '/' + dataAtual.getMonth() + '/' + dataAtual.getFullYear();
        var exibirNovaData = novaData.getDate() + '/' + novaData.getMonth() + '/' + novaData.getFullYear();
        document.getElementById("demo").innerHTML = exibirNovaData;
        document.getElementById("demodata").innerHTML = exibirData;
    }
</script>

O retorno da variável exibirNovaData é 27/2/2020 o correto seria 28/07/2012.

O que estou fazendo de errado?

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 1

Troca isso...

16 horas atrás, lm1979 disse:

var exibirData = dataAtual.getDate() + '/' + dataAtual.getMonth() + '/' + dataAtual.getFullYear();
var exibirNovaData = novaData.getDate() + '/' + novaData.getMonth() + '/' + novaData.getFullYear(); document.getElementById("demo").innerHTML = exibirNovaData;
document.getElementById("demodata").innerHTML = exibirData;

Por isso....

document.getElementById("demo").innerHTML = novaData.toLocaleDateString('pt-br');
document.getElementById("demodata").innerHTML = dataAtual.toLocaleDateString('pt-br');

E da pra encurtar o seu código todo, mudando o select....

<div class="form-group col">
  <label for="txtValidade">Validade</label>
  <select class="form-control" id="txtValidade" name="txtValidade">
    <option value="180">6 Meses</option>
    <option value="365">1 Ano</option>
    <option value="730">2 Anos</option>
  </select>
</div>
<div class="form-row">
  <div class="form-group col">
    <label for="txtDtEmissaoASO">Data da Emissão do ASO</label>
    <input type="date" class="form-control" id="txtDtEmissaoASO" name="txtDtEmissaoASO" required="required">
  </div>
  <div class="form-group col">
    <label for="txtDtValidadeASO">Data da Validade do ASO</label>
    <input type="date" class="form-control" id="txtDtValidadeASO" name="txtDtValidadeASO" required="required">
  </div>
</div>
<div class="form-row">
  <div class="form-group col">
    <label for="txtFuncionario">Nome do Funcionário</label>
    <input type="text" class="form-control" id="txtFuncionario" name="txtFuncionario" required="required" pattern="^[a-zA-ZÀ-ú\s]+$" placeholder="Nome do Funcionário">
  </div>
  <div class="form-group col">
    <label for="txtEmpresa">Nome da Empresa</label>
    <input type="text" class="form-control" id="txtEmpresa" name="txtEmpresa" required="required" placeholder="Nome da Empresa" onblur="calcular()">
  </div>
</div>
<div id="demodata"></div>
<div id="demo"></div>
<script>
  function calcular(){
    var dias = Number(document.getElementById("txtValidade").value);
    var dataAtual = new Date(document.getElementById("txtDtEmissaoASO").value);
    var novaData = new Date();
    novaData.setDate(dataAtual.getDate() + dias);
    document.getElementById("demo").innerHTML = novaData.toLocaleDateString('pt-br');
    document.getElementById("demodata").innerHTML = dataAtual.toLocaleDateString('pt-br');
  }
</script>

 

Link para o comentário
Compartilhar em outros sites

  • 0

Leonardo,

Eu fiz conforme sua orientação, mas as datas não estão batendo.

Exemplo:

Informei a data: 01/01/2011 no input txtDtEmissaoASO, na impressão da variável dataAtual saiu: 31/12/2010

Somei 180 dias na data 01/01/2011 e na impressão da variável novaData saiu: 29/03/2020, essa data é a soma de 180 dias com a data atual 30/09/2019 e deveria ser a soma de 180 dias com a data do input txtDtEmissaoASO.

Acredito que eu tenha que alterar a link "novaData.setDate(dataAtual.getDate() + dias);".

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...