Estoy tratando de aplicar el mínimo y el máximo para dos entradas de fechas, a saber:
<input type="date" name="proposal_from" id="proposal_from" /> <input type="date" name="proposal_to" id="proposal_to" /> <script type="text/javascript"> var proposal_from = document.getElementById("proposal_from"); var proposal_to = document.getElementById("proposal_to"); function setFromDate() { var today = new Date(); var dd = String(today.getDate()).padStart(2, '0'); var mm = String(today.getMonth() + 1).padStart(2, '0'); var minY = today.getFullYear(); var maxY = today.getFullYear() + 1; var minimum = minY + '-' + mm + '-' + dd; var maximum = maxY + '-' + mm + '-' + dd; proposal_from.min = minimum; proposal_from.max = maximum; } setFromDate(); proposal_from.addEventListener("change", function(){ var date = proposal_from.value.split("-"); var from_dd = date[2]; var from_mm = date[1]; var from_Y = date[0]; from_dd++; var min_to_dd; if(from_dd < 9){ min_to_dd = "0" + from_dd; } else { min_to_dd = from_dd; } var min_to_mm = from_mm; var min_to_Y = from_Y; from_Y++; var max_to_dd; if(from_dd < 9){ max_to_dd = "0" + from_dd; } else { max_to_dd = from_dd; } var max_to_mm = from_mm; var max_to_Y = from_Y; var minimum = min_to_Y + '-' + min_to_mm + '-' + min_to_dd; var maximum = max_to_Y + '-' + max_to_mm + '-' + max_to_dd; console.log(minimum); console.log(maximum); proposal_to.min = minimum; proposal_to.max = maximum; }); </script>el detector de eventos parece funcionar ahora, las fechas mínimas y máximas se establecen como debería ser la fecha impresa en la consola y los valores de fecha son completamente correctos. Antes, por ejemplo, si elijo la fecha 2021-10-04, obtengo un mínimo de 2021-10-5 y 2022-10-5 en lugar de 2021-10-05 y 2022-10-05, ¿hay alguna forma de hacerlo con . padStart()?
Debe usar la misma lógica que usó para rellenar ceros en setFromDate en su evento de cambio también.
¿Por qué se necesita esto?
Está realizando una operación incremental en from_dd usando from_dd++ , esto convertirá su tipo de Cadena a Número. Así que vuelva a convertirlo en cadena y realice su lógica de relleno numérico.
function setFromDate() { var today = new Date(); var dd = String(today.getDate()).padStart(2, '0'); var mm = String(today.getMonth() + 1).padStart(2, '0'); var minY = today.getFullYear(); var maxY = today.getFullYear() + 1; var minimum = minY + '-' + mm + '-' + dd; var maximum = maxY + '-' + mm + '-' + dd; console.log(minimum) proposal_from.min = minimum; proposal_from.max = maximum; } setFromDate(); proposal_from.addEventListener("change", function () { var date = proposal_from.value.split("-"); var from_dd = date[2]; var from_mm = date[1]; var from_Y = date[0]; from_dd++; var min_to_dd = String(from_dd).padStart(2, '0') var min_to_mm = from_mm; var min_to_Y = from_Y; from_Y++; var max_to_dd = String(from_dd).padStart(2, '0') var max_to_mm = from_mm; var max_to_Y = from_Y; var minimum = min_to_Y + '-' + min_to_mm + '-' + min_to_dd; var maximum = max_to_Y + '-' + max_to_mm + '-' + max_to_dd; proposal_to.min = minimum; proposal_to.max = maximum; }); <input type="date" name="proposal_from" id="proposal_from" /> <input type="date" name="proposal_to" id="proposal_to" />