设置 minDate 以防止在开始日期之前选择结束日期

Posted

技术标签:

【中文标题】设置 minDate 以防止在开始日期之前选择结束日期【英文标题】:Setting minDate to prevent from choosing enddate before start date 【发布时间】:2019-09-12 05:35:11 【问题描述】:

我有一个开始日期和结束日期供我选择日期。我正在使用 jQuery datepicker 库。

这就是我的函数现在的样子:

$(function() 

        $(".txtEndDate").datepicker(
            changeMonth: true,
            changeYear: true,
            showOn: 'button',
            buttonImage: '../../../images/calendar.png',
            buttonImageOnly: true,
            title:'Click to open calendar',
            alt:'Click to open calendar'
        );


    );




    $(function() 

        $(".txtStartDate").datepicker(
            changeMonth: true,
            changeYear: true,
            showOn: 'button',
            buttonImage: '../../../images/calendar.png',
            buttonImageOnly: true,

            title:'Click to open calendar',
            alt:'Click to open calendar',

            onSelect: function() 
                var start = $(this).datepicker("getDate");
                start.setDate(start.getDate() + 7);
                $(".txtEndDate").datepicker("setDate", start);
            

        );



    );

它有效,但我想在不允许用户选择今天之前的日期时做到这一点,因为无论如何它没有意义。例如,选择2018-01-01 不应该是有效的。你明白了。

找到建议使用minDate 解决此问题的文档。它说:

//initialize the datepicker
$( ".selector" ).datepicker(
  minDate: new Date(2007, 1 - 1, 1)
);

//get or set mindate option
// Getter
var minDate = $( ".selector" ).datepicker( "option", "minDate" );

// Setter
$( ".selector" ).datepicker( "option", "minDate", new Date(2007, 1 - 1, 1) );

看到我对字段代表的内容感到困惑,有没有办法阻止人们选择今天之前的任何日期?

我尝试了这个解决方案: jQuery Date Picker - disable past dates

但它并没有禁用它,仍然允许我选择。

【问题讨论】:

【参考方案1】:

您可以使用 datepicker 插件的 minDate 属性禁用过去的日期,如下所示。

$(".txtEndDate").datepicker(
            minDate: new Date(),  // Add this to diсable past date
            changeMonth: true,
            changeYear: true,
            showOn: 'button',
            buttonImage: '../../../images/calendar.png',
            buttonImageOnly: true,
            title:'Click to open calendar',
            alt:'Click to open calendar'
        );

【讨论】:

new Date(),将采用本地系统的默认格式 所以将它添加到 txtenddate 和 txtstartdate 中? 是的,您可以将其添加到 txtendate 和 txtstartdate 日期选择器 如果我尝试选择今天之前的日期会怎样? 添加这将禁用今天之前的上一个日期,它不允许您选择过去的日期【参考方案2】:

使用下面的代码将帮助您防止选择从今天开始的旧日期。

minDate : 0 // for current date

minDate: new Date(2007, 1 - 1, 1) // for particular minDate 

$("input.DateFrom").datepicker(
    minDate: 0  
);
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
  <link rel="stylesheet" href="/resources/demos/style.css">
  <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
  <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<input class="DateFrom">

结束日期小于开始日期的代码请参考代码:-

  $("#StartDate").datepicker(
        numberOfMonths: 2,
        onSelect: function(selected) 
          $("#EndDate").datepicker("option","minDate", selected)
        
    );
    $("#EndDate").datepicker( 
        numberOfMonths: 2,
        onSelect: function(selected) 
           $("#StartDate").datepicker("option","maxDate", selected)
        
    );  

【讨论】:

为什么是0?而不是当前日期 @Daredevil 0 指的是当前日期,您也可以像这样将日期更改为固定日期 minDate: new Date(2007, 1 - 1, 1) 有没有办法阻止人们选择结束日期 @Daredevil 确定你可以像这样使用 maxDate: "+1m +1w" 。设置结束日期。但它使用较少来设置结束日期 我不关注,我如何确保我不能选择小于开始日期的结束日期?

以上是关于设置 minDate 以防止在开始日期之前选择结束日期的主要内容,如果未能解决你的问题,请参考以下文章

jquery-ui datepicker 设置开始结束时间选择范围

minDate 没有被设置?

jQueryUI DatePicker - 将点击事件添加到 minDate 和 maxDate 之外的日期

JQuery UI日期选择器结束日期开始日期后1天

vue:element.ui中中日期时间范围选择控件怎么设置选择的范围,不能跨月选择

DataTimePicker 怎样设置可以不能选择当前日期之后的时间