Javascript Jquery日期选择器中的多个设置

Javascript Jquery日期选择器中的多个设置,javascript,jquery-ui,jquery-ui-datepicker,Javascript,Jquery Ui,Jquery Ui Datepicker,在这件事上似乎有很多有用的话题,所以我不能把它们全部结合起来。它们工作得很好。但它结合了我遇到问题的功能 我所拥有的: 使用jquery日期选择器的“from”和“to”输入字段。 用户选择“开始”日期,然后“结束”日期将允许根据所选日期在未来+4天内进行选择。编辑 第三个隐藏字段计算两个选择之间的天数。 以下是我目前拥有的一把小提琴: 问题是: 如果用户在一个月内选择“从”,在另一个月内选择“到”,即:2013年8月30日-2013年9月2日,则计算字段错误。 “收件人”字段未考虑之前所选字段

在这件事上似乎有很多有用的话题,所以我不能把它们全部结合起来。它们工作得很好。但它结合了我遇到问题的功能

我所拥有的:

使用jquery日期选择器的“from”和“to”输入字段。 用户选择“开始”日期,然后“结束”日期将允许根据所选日期在未来+4天内进行选择。编辑 第三个隐藏字段计算两个选择之间的天数。 以下是我目前拥有的一把小提琴:

问题是:

如果用户在一个月内选择“从”,在另一个月内选择“到”,即:2013年8月30日-2013年9月2日,则计算字段错误。 “收件人”字段未考虑之前所选字段的minDate 4天以上。 最后,这是我的代码所有这些都在上面的提琴中:

$(function () {
$("#from, #to").datepicker({
    onSelect: function () {
        var from = new Date($("#from").val().split("/").reverse().join(","));
        var to = new Date($("#to").val().split("/").reverse().join(","));
        var total = ((to - from) / 2592000000);
        var rounded = Math.round(total);
        $("#totaldays").val(rounded);

    }
});
$("#from").datepicker({
    minDate: 4,
    defaultDate: "+1w",
    changeMonth: true,
    numberOfMonths: 2,
    onClose: function (selectedDate) {
        $("#to").datepicker("option", "minDate", selectedDate);
    }
});
$("#to").datepicker({
    defaultDate: "+1w",
    changeMonth: true,
    numberOfMonths: 2,
    onClose: function (selectedDate) {
        $("#from").datepicker("option", "maxDate", selectedDate);
    }
});

});

非常感谢任何能在这方面提供帮助的人

所以在接受我的答案后,这里是我代码的正确版本。 做你想做的事情基本上很简单。 如果有人选择了开始日期,则to datepicker中的第一个可能的日期距离将来还有4天。因此,我们使用minDate选项并使用setDate计算新日期。 在选择第二个日期后,我们调用totalDays函数,该函数减去两个日期,产生差值,并将差值转换为天数。 如果用户首先选择了截止日期,我们也会调用TotalDays,但为了不显示负日期,我们会检查是否设置了起始日期。如果不是或天数为负数,则不显示任何值

 $(function () {
    $("#from").datepicker({
        defaultDate: "+1w",
        changeMonth: true,
        numberOfMonths: 2,
        minDate: 4,
        onSelect: function (selectedDate) {
            //set #to date +4 days in the future, starting from #from date
            var fromDate = new Date(selectedDate);
            var minDate  = new Date(fromDate.setDate(fromDate.getDate() + 4));

            $("#to").datepicker("option", "minDate", minDate);
        },
        onClose: function (selectedDate) {
            //alternatively call it in onSelect
            totalDays();
        }
    });
    $("#to").datepicker({
        defaultDate: "+1w",
        changeMonth: true,
        numberOfMonths: 2,
        minDate: 4,
        onClose: function (selectedDate) {
            //alternatively call it in onSelect
            totalDays();
        }
    });

    function totalDays() {
        //subtract the two Date objects, convert seconds to days
        var from    = $('#from').datepicker('getDate');
        var to      = $('#to').datepicker('getDate');
        var seconds = to - from;
        var days    = Math.ceil(seconds / (1000 * 3600 * 24));

        //dont fill in value if only #to has a valid
        if (days > 0 && from) {
            $('#totaldays').val(days);
        }
    }

});

谢谢@j08691我会记住你上面更正的格式。首先,谢谢你。我把代码玩弄了一点,意识到我错误地误导了你。截止日期与起始日期之间的minDate应为+4。抱歉,这不是我给你介绍的最重要的约会。我注释掉了$'to'.datepicker'option','maxDate',maxDate;但是,一旦您选择它,它仍然会更正代码。我应该删除哪一部分来缓解这个问题?下面是我在上面的评论中的一个扩展:如果你选择了一个超过4天的范围,它会自动调整为4天。我想然后在to Date Picker的onSelect函数中注释掉所有内容。这适合你的需要吗?如果是的话,我会更正我的答案。是的,没错。为了保持连续性,我在ToDatePicker下添加了minDate:4,这样,如果用户首先选择to字段,他们就不能选择与from字段不同的日期,尽管我想这并不重要,因为在选择from之后,它将被覆盖。非常感谢您在这方面的帮助!除了代码中的注释之外,它真的很有帮助!不客气!我只是用正确的答案编辑了我的答案,以消除误解;