Como adicionar x dias a uma data usando javascript

Le Future

Membro
Boas pessoal,

Eu tenho um formulário html e tenho um campo onde a gente pode escolher uma data e depois tenho um botão de submit. O meu objectivo seria que quando eu escolhesse uma data e clicasse no botão, que fosse adicionado a essa data + 28 dias e que o output fosse esse. Mas não estou conseguindo.

Eu tenho o seguinte em html:
<input name="date" type="date" class="" id="datesubmitted" required />
<input name="calcdate" type="submit" class="" id="calcdate" value="Calculate Expected Date" />

E tenho o seguinte em javascript:
window.onload = function(){

var submit = document.getElementById("calcdate");
var date = document.getElementById('datesubmitted').value;
var days = 28;

var addDays = function(){

date.setDate(date.getDate() + days);
console.log(date);

}
submit.onclick = addDays;
};

Por algum motivo não está resultando. Por exemplo, se eu escolhesse como data dia 24-01-2018, depois de clicar no botão, o resultado (output) devia de ser 21-02-2018 (ou seja, adicionou mais 28 dias á data que tinha sido escolhida).

Alguém me pode ajudar a conseguir por isto a funcionar como deve ser, o que estou fazendo mal?
 
A data tem que estar em formato string.

Código:
window.onload = function(){

  var submit = document.getElementById("calcdate");
  var date = document.getElementById('datesubmitted');
  var days = 28;

  var addDays = function(){
      var dt = new Date(date.value);
      dt.setDate(dt.getDate() + days);
      date.value = formatDate(dt);

  }
 
  var formatDate = function(date) {
    var d = new Date(date),
        month = '' + (d.getMonth() + 1),
        day = '' + d.getDate(),
        year = d.getFullYear();

    if (month.length < 2) month = '0' + month;
    if (day.length < 2) day = '0' + day;

    return [year, month, day].join('-');
}

 
  submit.onclick = addDays;
};
 
Boas pessoal,

Eu tenho um formulário html e tenho um campo onde a gente pode escolher uma data e depois tenho um botão de submit. Quando eu clico no botão de submit ele adiciona 28 dias a essa data pois é esse o objectivo.

Neste momento o que eu estou tentando fazer é limitar o calendário. Por exemplo eu só quero que os 28 dias sejam aplicados apenas tendo em conta as seguintes datas:
24 de Setembro 2017 - 16 de Dezembro 2017
7 de Janeiro de 2018 - 24 de Março de 2018
15 de Abril de 2018 - 10 de Junho de 2018

Por exemplo: Se eu colocar a data de 16-12-18, após clicar no botão de submit, o output deveria de ser 02-02-2018.
A conta de +28 dias só deve ser contada apenas contabilizando dentro das datas mencionadas acima.

Alguém sabe como fazer isto em javascript?

Eu não sei bem como fazer.
 
Boas, penso que não haja nenhuma maneira simples de o fazer, é por condicionantes.

Penso que seja isto o que pretendes, testa e vê no que dá.
Vai funcionar bem nas transições de ano pelo menos, é possivel abstrair o código para seleccionares os ditos periodos sem ter que mudar no código em si mas isso requer outro brain power que a esta hora já não existe :berlusca:


Código:
var second = 1000;
var minute = second*60;
var hour = minute*60;
var day = hour*24;

//ATENÇÃO OS MESES COMEÇAM PELO 0, JANEIRO = 0, FEVEREIRO = 1 ...
var data = new Date(2018,11,31);

var output;


if(data.getMonth() < 3) {
    // até Março
    if(data.getMonth()===0 && data.getDate()<7) {
      // se for entre 01JAN a 06JAN
      data.setDate(7); output = data.getTime() + (day*28);
  }else if(data.getMonth()===2 && data.getDate()>23) {
      // se for entre 24MAR a 31MAR
      data.setDate(15);data.setMonth(3); output = data.getTime() + (day*28);
  }else {
      // caso seja no periodo 07JAN a 23MAR
      output = data.getTime() + (day*28);
  }
}else if(data.getMonth()>2 && data.getMonth()<6){
    //entre Abril e Junho
  if(data.getMonth()===3 && data.getDate()<15) {
      // se for entre 01ABR a 14ABR
      data.setDate(15); output = data.getTime() + (day*28);
  }else if(data.getMonth()===5 && data.getDate()>9) {
      // se for entre 10JUN a 30JUN
      data.setDate(24);data.setMonth(8); output = data.getTime() + (day*28);
  }else {
      // caso seja no periodo 15ABR a 9JUN
      output = data.getTime() + (day*28);
  }
}else{
    if(data.getMonth()<8) {
  // antes de Setembro
      data.setDate(24);data.setMonth(8); output = data.getTime() + (day*28);
  }else if(data.getMonth()===8 && data.getDate()<24) {
      // entre 01SET a 23SET
      data.setDate(24); output = data.getTime() + (day*28);
  }else if(data.getMonth()===11 && data.getDate()>15) {
      // entre 16DEC a 31DEC
      data.setDate(07); data.setMonth(0); data.setFullYear((data.getFullYear()+1)); output = data.getTime() + (day*28);
  }else{
  // caso seja no periodo 24SET a 15DEC
      output = data.getTime() + (day*28);
  }
}

console.log(new Date(output))
 
A data tem que estar em formato string.

Código:
window.onload = function(){

  var submit = document.getElementById("calcdate");
  var date = document.getElementById('datesubmitted');
  var days = 28;

  var addDays = function(){
      var dt = new Date(date.value);
      dt.setDate(dt.getDate() + days);
      date.value = formatDate(dt);

  }

  var formatDate = function(date) {
    var d = new Date(date),
        month = '' + (d.getMonth() + 1),
        day = '' + d.getDate(),
        year = d.getFullYear();

    if (month.length < 2) month = '0' + month;
    if (day.length < 2) day = '0' + day;

    return [year, month, day].join('-');
}


  submit.onclick = addDays;
};

Não tenho conhecimento necessário para modificar esse script e fazer o que preciso que é, somente, colocar dentro de uma div um texto tipo "Data mais provável de entrega: 15/01/2020". Então quero, apenas, somar dias a uma data, colocar numa variável e chamar essa variável no lugar dessa data em html.Como fazer isso?
 
Back
Topo