Jquery ui datepicker con eom y mamá
Pregunta
Necesito implementar un calendario de ui jQuery que cuando un usuario haga clic en cualquier fecha, seleccione automáticamente a la siguiente mamá o EOM.
Por ejemplo, si el usuario hace clic en el 9 de abril, debe ir al '15 de abril', O si los clics del 22 de febrero, deben ir a '28 de febrero' o '29 de febrero'.
para aclarar: Mamá es "mediados de mes, cada vez que es 15", de 1 a 15 de cualquier mes. EOM es "Fin del mes, es el último día del mes, 31 de enero, 28 de febrero, 28 de febrero, mar 31, 30 de abril, 31 de mayo, 30 de junio, 31 de julio, 31 de agosto, 30 de septiembre, 31 de octubre, 30 de noviembre,31 de diciembre ...
gracias
Solución 3
El código que funciona con IE6 / IE7 / IE8 / IE9 y FF, Chrome, etc.
<script type="text/javascript">
$(function() {
$("#payperiodcalendar input").datepicker({
dateFormat: 'dd-M-yy',
onSelect: function(dateText, inst) {
var selectedDay = inst.currentDay,
selectedMonth = inst.currentMonth,
selectedYear = inst.currentYear;
if (selectedDay <= 15) {
var now = new Date(selectedYear, selectedMonth, 15);
} else {
var now = new Date(selectedYear, selectedMonth, LastDayOfMonth(selectedYear, selectedMonth));
}
$(this).attr("value", now.format("dd-MMM-yyyy"));
}
});
function LastDayOfMonth(Year, Month) {
Month++;
return (new Date((new Date(Year, Month, 1)) - 1)).getDate();
}
});
</script>
Otros consejos
Haría esto como un controlador estándar de JQuery Onchange para el cuadro de texto.La razón es que un usuario puede pasar por alto la fecha-recolector y escriba una fecha manualmente.Desea que la fecha se cambie automáticamente, sin importar si se selecciona la fecha, mecanografiada o pegada.
Utilice el evento ONSELECT de DatePicker.Tenga en cuenta que si tiene configuración de opción MaxDate y está antes de la EOM o la madre, el valor seleccionado será MaxDate.
Actualización: Cerrar después de seleccionar.Use ontslose en lugar.
update2: jsfiddle usando el último jQuery ui
onClose: function(dateText, inst) {
var day = inst.currentDay,
month = inst.currentMonth,
year = inst.currentYear;
if (day <= 15) {
day = 15;
}
else {
day = 0;
if (month>10){
month = 0;
year++;
}
else
month++;
}
var d = new Date(year, month, day);
$(this).datepicker("setDate", d);
}