【问题标题】:jQuery datepicker minDate variablejQuery datepicker minDate 变量
【发布时间】:2010-03-20 20:23:18
【问题描述】:

我正在使用 jQuery 日期选择器。在我的“结束日期”文本框中,我想使用从“开始日期”文本框中选择的日期 + 1。我该怎么做?

我试过了,但没有用。在我的开始日期代码中,我有...

            test = $(this).datepicker('getDate');
            testm = new Date(test.getTime());
            testm.setDate(testm.getDate() + 1);

然后在我的结束日期代码中...

minDate: testm,

但结束日期仍然使该月的所有天数都可用。


编辑。我很好奇为什么这不起作用。在我的开始日期选择器中,我有这个..

onSelect: function (dateText, inst) {
    test = dateText
}

为什么我不能进入我的结束日期日期选择器并说,minDate: test


编辑。仍然无法正常工作

    $(".dateStartDatePickerBox").datepicker({
        minDate:'-0d',
        onSelect: function(dateText, inst)
        {
            test = $(this).datepicker('getDate');
            testm = new Date(test.getTime());
            testm.setDate(testm.getDate() + 1);

            $("#dateEndDatePickerBox").datepicker("option", "minDate", testm);
        }
    });

    $(".dateEndDatePickerBox").datepicker({
        onSelect: function()
        {

        }
    });

【问题讨论】:

    标签: javascript jquery datepicker


    【解决方案1】:

    您需要在开始日期的更改事件上动态设置最小日期。

    类似:

    $("#startDate").change(function() {
        test = $(this).datepicker('getDate');
        testm = new Date(test.getTime());
        testm.setDate(testm.getDate() + 1);
    
        $("#endDate").datepicker("option", "minDate", testm);
    });
    

    编辑答案:

    您不能执行以下操作:

    var test;
    $("#myinput").datepicker({
        onSelect: function() { test = $(this).datepicker("getdate"); }
    });
    $("#myotherinput").datepicker({
        minDate: test
    });
    

    在将 minDate 设置为 myotherinput 时,测试未初始化。设置 minDate 的过程无疑需要 datepicker 在初始化或调用“选项”时管理的 DOM 操作。简单地更改用于初始化的变量不会影响已经初始化的日期选择器。

    【讨论】:

    • 乔尔,我试过了。但是在选择之后说,我的开始日期是 2010 年 3 月 23 日。本月的结束日期选项仍然可用。在此示例中,目标是让它们从 2010 年 3 月 24 日开始。
    • 这个方法在这里工作:jsbin.com/uvehu/edit。如果它仍然不适合您,请提供更多上下文和代码。
    • 乔尔,我可以看到该示例有效。我将编辑我的原始帖子以显示我拥有的代码。感谢您的帮助。
    • 乔尔,我的直觉是我拥有的代码。开始日期代码中的这一行 - $("#dateEndDatePickerBox").datepicker("option", "minDate", testm);结束日期代码看不到。是不是我放错地方了?
    • 谢谢乔尔。你的例子是正确的。我的编辑不起作用的原因是因为我有这个 - $("#dateEndDatePickerBox") 当我需要 .像这样 $(".dateEndDatePickerBox") 再次感谢您的帮助。
    【解决方案2】:

    您是在说设置最大选择日期吗?

    StartDate = new Date("March 20, 2010");
    EndDate = new Date("March 21, 2010");
    
    $("#datepicker").datepicker({ minDate: StartDate, maxDate: EndDate, defaultDate: StartDate  });
    

    注意 maxDate 吗?这不会让你选择过去的任何日子......

    【讨论】:

    • 贾斯汀,差不多了。让我再解释一下。在您的示例 StartDate ...我需要将其作为从我的开始日期日历中选择的日期。然后对于 EndDate,我需要说,无论选择的日期是什么 + 1。
    【解决方案3】:

    日期选择器的 API documentation 似乎说它应该接受一个 Date 对象,但我过去遇到过这个确切的问题,这就是我解决它的方法。

    传递minDate 一个偏移量,而不是日期。您需要一个函数来获取您的开始日期,添加一个,然后获取从今天开始的偏移量。所以你可以有这样的功能:

    function offsetFromToday( someDate ) {
      // clear time offset because we only want to take date into account
      someDate.setHours( 0 );
      someDate.setMinutes( 0 );
    
      // The number of milliseconds in one day
      var ONE_DAY = 1000 * 60 * 60 * 24;
    
      // Convert both dates to milliseconds
      someDate = someDate.getTime();
      var today = new Date().getTime();
    
      // Calculate the difference in milliseconds
      var difference = Math.abs( someDate - today );
    
      // Convert back to days and return
      return Math.floor( (difference / ONE_DAY) + 1 );
    }
    

    因此,您只需提前一天获取开始日期:StartDate.setDate( StartDate.getDate() + 1 ) 或类似的,然后将其传递给此函数以获取偏移量,然后将 那个 传递给 minDate

    【讨论】:

    • thenduks,我不完全清楚我目前拥有的从哪里调用它。你能看看我的最后一次编辑,告诉我在哪里有这个吗?
    • btw - 我认为在我上次的编辑中,这会起作用,但我有这一行 - $("#dateEndDatePickerBox").datepicker("option", "minDate", testm);在错误的地方,结束日期 datepicker 没有看到它。我不确定在结束日期日期选择器中实施该行。
    猜你喜欢
    • 2013-06-23
    • 1970-01-01
    • 2014-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多