jQuery UI Picking a start and end date within range based on start date

后端 未结 3 1376
深忆病人
深忆病人 2021-02-13 13:39

I\'m building a date picker in jQuery ui. What I\'m trying to do is set a range, so when they pick the first date the second date appears and gives a 30 day window. I tried this

3条回答
  •  深忆病人
    2021-02-13 14:20

    Check this jsfiddle here. It's a working example of your problem.

    HTML

    
    
    

    JS

    $(document).ready(function () {
        $("#dt1").datepicker({
            dateFormat: "dd-M-yy",
            minDate: 0,
            onSelect: function () {
                var dt2 = $('#dt2');
                var startDate = $(this).datepicker('getDate');
                //add 30 days to selected date
                startDate.setDate(startDate.getDate() + 30);
                var minDate = $(this).datepicker('getDate');
                var dt2Date = dt2.datepicker('getDate');
                //difference in days. 86400 seconds in day, 1000 ms in second
                var dateDiff = (dt2Date - minDate)/(86400 * 1000);
    
                //dt2 not set or dt1 date is greater than dt2 date
                if (dt2Date == null || dateDiff < 0) {
                        dt2.datepicker('setDate', minDate);
                }
                //dt1 date is 30 days under dt2 date
                else if (dateDiff > 30){
                        dt2.datepicker('setDate', startDate);
                }
                //sets dt2 maxDate to the last day of 30 days window
                dt2.datepicker('option', 'maxDate', startDate);
                //first day which can be selected in dt2 is selected date in dt1
                dt2.datepicker('option', 'minDate', minDate);
            }
        });
        $('#dt2').datepicker({
            dateFormat: "dd-M-yy",
            minDate: 0
        });
    });
    

    As soderslatt already mentioned use the onSelect option to set the dates. Other methods I used are:

    • getDate
    • setDate
    • minDate
    • maxDate

    I think they're all very self explanatory and the documentation helps you to understand how they work. If you want to set the date of the second datepicker to dt1's date + 1 day do the same as in this line:

    startDate.setDate(startDate.getDate() + 30);
    

    But of course add 1 day and not 30.

提交回复
热议问题