JQuery UI Datepicker с EOM и MOM - PullRequest
       24

JQuery UI Datepicker с EOM и MOM

1 голос
/ 08 марта 2012

Мне нужно внедрить календарь пользовательского интерфейса Jquery, который, когда пользователь нажимает на любую дату, автоматически выбирает следующую MOM или EOM.

Например, если пользователь щелкает 9 апреля, он должен перейти к «15 апреля», или если щелкнуть 22 февраля, значение должно быть «28 февраля» или «29 февраля».

Для уточнения: МАМА - «Середина месяца, каждый раз 15-й», с 1 по 15 любого месяца. МНВ - «Конец месяца, последний день месяца, 31 января, 28 или 29 февраля, 31 марта, 30 апреля, 31 мая, 30 июня, 31 июля, 31 августа, 30 сентября, 31 октября, 30 ноября, декабрь 31 ...

Спасибо

Ответы [ 3 ]

1 голос
/ 08 марта 2012

Я бы сделал это как стандартный обработчик jquery onchange для текстового поля.Причина в том, что пользователь может обойти выбор даты и ввести дату вручную.Вы хотите, чтобы дата автоматически изменялась независимо от того, была ли она выбрана, введена или вставлена.

1 голос
/ 08 марта 2012

Используйте событие onSelect от DatePicker.Имейте в виду, что если у вас установлена ​​опция maxDate и перед EOM или MOM выбранное значение будет maxDate.

UPDATE: Закрыть после выбора.Вместо этого используйте onClose.

UPDATE2: jsFiddle с использованием последнего пользовательского интерфейса jQuery

  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);
  }
0 голосов
/ 08 марта 2012

Код, который работает с IE6 / IE7 / IE8 / IE9 и FF, Chrome и т. Д.

    <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>
...