Como optimizar función de sumar días a una fecha en JavaScript?

publicado por: Anonymous

Conseguí la siguiente función en Javascript para sumarle días a una fecha, pero me parece que hace muchos pasos innecesarios, como podría optimizarla?

function MostrarFechaT() {
        var d = document.getElementById('dias').value;
        if (d == 0) {
            alert("No has ingresado el nu00famero de du00edas")
            var fechaFinal = "";
        } else {
            var Fecha = new Date();
            var sFecha = (Fecha.getDate() + "-" + (Fecha.getMonth() + 1) + "-" + Fecha.getFullYear());
            var sep = sFecha.indexOf('-') != -1 ? '-' : '-';
            var aFecha = sFecha.split(sep);
            var fecha_array = aFecha[2] + '-' + aFecha[1] + '-' + aFecha[0];
            fecha = new Date(fecha_array);
            fecha.setDate(fecha.getDate() + parseInt(d));
            var anno = fecha.getFullYear();
            var mes = fecha.getMonth() + 1;
            var dia = fecha.getDate();
            mes = (mes < 10) ? ("0" + mes) : mes;
            dia = (dia < 10) ? ("0" + dia) : dia;
            var fechaFinal = (dia + sep + mes + sep + anno);
            var fechaFinalPasar = (anno + sep + mes + sep + dia);
            document.getElementById("fecha_termino").value = fechaFinal;
            document.getElementById("valor_fechatermino").value = fechaFinalPasar;
            document.getElementById("restablecer").hidden = false;
        }
    }

HTML:

    <input type="text" name="dias" id="dias" size="1" maxlength="2" onKeyPress="return soloNumeros(event);" onchange="MostrarFechaT();comprobarAmplitud();" onpaste="return false" oncopy="return false" disabled>
<input type="text" name="fecha_inicio" value="<?php echo $fecha=date('d-m-Y') ?>" readonly disabled id="fecha_inicio"> 
<input type="text" name="valor_fechainicio" value="<?php echo $fecha=date('Y-m-d') ?>" >                                 
<input type="text" name="fecha_termino" readonly id="fecha_termino"> 
<input type="text" name="valor_fechatermino" id="valor_fechatermino">

Funcion adaptada a la respuesta de @OscarGarcia:

function MostrarFechaT() {
  var numero = document.getElementById("dias");
  var resultado = document.getElementById("fecha_termino");
  var resultado_pasar = document.getElementById("valor_fechatermino");
  var hoy = new Date();
  alert(hoy);
  var dias = parseInt(numero.value);
  alert(dias);
  var calculado = new Date();
  alert(calculado);
  calculado.setDate(hoy.getDate() + dias);
  resultado = calculado.getDay() + '-' + calculado.getMonth() + '-' + calculado.getFullYear();
  resultado_pasar = calculado.getFullYear() + '-' + calculado.getMonth() + '-' + calculado.getDay();
  document.getElementById("fecha_termino").value = resultado;
  document.getElementById("valor_fechatermino").value = resultado_pasar;
  document.getElementById("restablecer").hidden = false;
}

Problema actual:

Con la fecha actual 5-5-17 si sumo 1 dia devuelve: 6-4-17 si sumo 2 deveulve 0-4-17

solución

Puedes usar la siguiente conversión de fechas para sumar el número de días deseado usando el objeto Date:

_x000D_

_x000D_

var numero = document.getElementById("numero");_x000D_
var resultado = document.getElementById("resultado");_x000D_
function calcular() {_x000D_
  var hoy = new Date();_x000D_
  var dias = parseInt(numero.value);_x000D_
  var calculado = new Date();_x000D_
  calculado.setDate(_x000D_
    hoy.getDate() + dias_x000D_
  );_x000D_
  resultado.innerText = calculado.getDate() + '/' +_x000D_
    (calculado.getMonth() + 1) + '/' + calculado.getFullYear() +_x000D_
    ' -- ' + calculado.getFullYear() + '/' +_x000D_
    (calculado.getMonth() + 1) + '/' + calculado.getDate();_x000D_
}

_x000D_

<p>_x000D_
  <input type="number" id="numero" min="0" max="120" value="0" />_x000D_
  <button onclick="calcular()">Calcular</button>_x000D_
</p>_x000D_
<p>Resultado: <span id="resultado"></span></p>

_x000D_

_x000D_

_x000D_

Lo que hacemos es sacar partido de la funcionalidad que ofrece Date.setDate() que incrementa o decrementa automáticamente el mes (y el año) si pasamos por debajo de 1 o por encima del número de días del mes.

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *