Tengo dos campos de entrada como estos,
<div class="form-group mb-3"> <label for="">Challenge Start Date and Time</label> <input type="datetime-local" class="form-control form-control-sm" name="date" id = "date" value=""/> </div> <div class="form-group mb-3"> <label for="">Challenge End Date and Time</label> <input type="datetime-local" class="form-control form-control-sm" name="end_date" id = "end_date" value=""/> </div>
Lo que quiero hacer en realidad es cualquier tiempo que el usuario establezca en la entrada "Inicio", ese tiempo + 45 minutos debe establecerse en el segundo campo de entrada.
Por lo tanto, probé lo siguiente, pero desafortunadamente, debido a la conversión del tiempo de entrada en la cadena, no puedo llamar a getMinutes() + 45
var now = new Date(); now.setMinutes(now.getMinutes() - now.getTimezoneOffset()); document.getElementById('date').value = now.toISOString().slice(0,16); now.setMinutes(now.getMinutes() + 45); document.getElementById('end_date').value = now.toISOString().slice(0,16); document.getElementById('date').addEventListener('change', (e) => { const value = e.target.value; value.setMinutes(value.getMinutes() + 45); document.getElementById('end_date').value = now.toISOString().slice(0,16); });
Recibo este error cada vez que cambio el valor del primer campo de entrada,
Uncaught TypeError: value.getMinutes is not a function
¿Alguien puede proporcionar una solución a este problema?
Prueba esto
esto cambiará obtener la entrada de campo1 a campo2
const value = new Date(e.target.value); value.setMinutes(value.getMinutes() + 45); value.setMinutes(value.getMinutes() - value.getTimezoneOffset()); document.getElementById('end_date').value = value.toISOString().slice(0,16);
Te perdiste los minutos de la zona horaria menos el valor calculado
Escribe tu función onchange así:
document.getElementById('date').addEventListener('change', (e) => { var date = new Date(document.getElementById('date').value); date.setMinutes(date.getMinutes() - date.getTimezoneOffset()); date.setMinutes(date.getMinutes() + 45); document.getElementById('end_date').value=date.toISOString().substring(0, 16); })
El value
de un campo datetime-local
no devuelve un objeto Date
. Devuelve una representación de cadena de la fecha (ISO-8601).
Aquí puede encontrar más información sobre la propiedad value
de un <input type="datetime-local">
Para convertir esto en un objeto de Date
, simplemente puede pasar el valor al constructor de esta manera:
var myDate = new Date(e.target.value);