¿Me estoy volviendo loco? Puede cambiar la fecha en el selector de fechas básico de varias formas:
Obtiene diferentes fechas informadas en el evento changeMonth (o desde getformattedDate) dependiendo de la forma en que cambie la fecha, pero una de ellas no tiene sentido.
Si hace clic en el nombre del mes y selecciona un mes, devuelve el primer día del nuevo mes, todo bien. Si hace clic en las flechas, regresa el mismo día pero en el nuevo mes, por ejemplo, si está el 29 de noviembre, regresará el 29 de diciembre. Sigue bien.
Sin embargo, si hace clic en un día del mes siguiente, devuelve la fecha original de la que acaba de llegar, por ejemplo, si era el 29 de noviembre y hace clic en el 5 de diciembre, todavía devuelve el 29 de noviembre.
$('#calendar').datepicker({ autoclose: true, format: "yyyy-mm-dd", updateViewDate: true, todayHighlight: false, immediateUpdates: true }) .datepicker('update', '2021-11-29') .on('changeDate', function(e){ // console.log("changeDate: triggered", e); }) .on('changeMonth', function(e){ let updated_content = $('#show_date').val() + '\n' + e.date.toString() + " : " + $('#calendar').datepicker('getFormattedDate') $('#show_date').val(updated_content) });Configuré un violín básico para ilustrar este comportamiento en https://jsfiddle.net/shaunhurley/k5ovtb9h/35/
¿Me estoy perdiendo de algo?
Parece que al hacer clic en una fecha, la fecha se cambia por ese clic de fecha real, en lugar de por el cambio de mes. El problema es que el evento changeMonth se activa antes de que se cambie la fecha.
Aquí hay una solución:
.on('changeMonth', function(){ setTimeout(()=> { let updated_content = $('#show_date').val() + '\n' + $('#calendar').datepicker('getDate').toString() + " : " + $('#calendar').datepicker('getFormattedDate'); $('#show_date').val(updated_content) }, 0) })Y un violín actualizado: https://jsfiddle.net/TokerX/8jfkua7v/