Quiero cambiar el objeto de fecha cada vez que hago clic en el botón. Estoy tratando de manejarlo usando la siguiente función:
.on('click', '.change-date-button', function () { Date.prototype.addDays = function(days) { var date = new Date(this.valueOf()); date.setDate(date.getDate() + days); return date; } var date = new Date(); console.log(date.addDays(3)); }
Pero como resultado, obtengo el mismo objeto. ¿Cómo incrementar y disminuir el objeto de fecha de la manera correcta y obtener una nueva fecha agregada siete días cada vez que se hace clic? Como ejemplo, obtengo 18/07/2022 varias veces, sin embargo, necesito obtener 21/07/2022, 24/07/22, etc... para el siguiente clic.
Es una mala idea redefinir un método en un prototipo con cada clic de un botón. También podría hacer el trabajo en línea , sin ninguna función.
Además, su función hace explícitamente el trabajo de no cambiar la fecha, sino devolver una nueva, y la función siempre se llama con la fecha y hora de hoy , en cada clic.
Se refiere a "el objeto de fecha" como un objeto global, pero luego necesita crearlo como global:
var date = new Date(); // <-- outside handler scope // ... $(document).on('click', '.change-date-button', function () { date.setDate(date.getDate() + 3); console.log(date); });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <button class="change-date-button">Add three days</button>
Una alternativa es usar la biblioteca date-fns, porque en este caso no necesitarías rehacer algo que ya existe de forma simplificada.