【问题标题】:jQuery Date Picker - disable past datesjQuery Date Picker - 禁用过去的日期
【发布时间】:2012-01-11 11:37:14
【问题描述】:

我正在尝试使用 UI 日期选择器选择日期范围。

在 from/to 字段中,人们不应查看或选择当前日期之前的日期。

这是我的代码:

$(function() {
    var dates = $( "#from, #to" ).datepicker({
        defaultDate: "+1w",
        changeMonth: true,
        numberOfMonths: 1,
        onSelect: function( selectedDate ) {
            var option = this.id == "from" ? "minDate" : "maxDate",
                instance = $( this ).data( "datepicker" ),
                date = $.datepicker.parseDate(
                    instance.settings.dateFormat ||
                    $.datepicker._defaults.dateFormat,
                    selectedDate, instance.settings );
            dates.not( this ).datepicker( "option", option, date );
        }
    });
});

有人能告诉我如何禁用之前到现在的日期吗?

【问题讨论】:

    标签: jquery jquery-ui datepicker uidatepicker jquery-ui-datepicker


    【解决方案1】:

    您必须在初始化日期选择器时创建一个新的日期对象并将其设置为minDate

    <label for="from">From</label> <input type="text" id="from" name="from"/> <label for="to">to</label> <input type="text" id="to" name="to"/>
    
    var dateToday = new Date();
    var dates = $("#from, #to").datepicker({
        defaultDate: "+1w",
        changeMonth: true,
        numberOfMonths: 3,
        minDate: dateToday,
        onSelect: function(selectedDate) {
            var option = this.id == "from" ? "minDate" : "maxDate",
                instance = $(this).data("datepicker"),
                date = $.datepicker.parseDate(instance.settings.dateFormat || $.datepicker._defaults.dateFormat, selectedDate, instance.settings);
            dates.not(this).datepicker("option", option, date);
        }
    });
    

    编辑 - 现在从您的评论中可以正常工作http://jsfiddle.net/nicolapeluchetti/dAyzq/1/

    【讨论】:

    • 我想实现一种方法,人们不应该能够选择一个已经过去的日期......比如前一天等。只有从今天开始。
    • @HarshaMV 我更新了我的答案,你应该在初始化日期选择器时设置 minDate
    • 您可以将showAnim:"", 添加到日期选择器设置中,以在您做出选择时消除烦人的月份和年份变化。
    • 我使用了你的脚本,但我收到错误“未捕获的 ReferenceError:$ 未定义”。我将如何解决这个问题?
    • @NicolaPeluchetti 这正是我所需要的,但这可以在 asp:Textbox 中使用吗?我试过但它不起作用,我应该做任何具体的改变吗?提前谢谢你
    【解决方案2】:

    声明 dateToday 变量并使用 Date() 函数来设置它.. 然后使用该变量分配给作为 datepicker 参数的 minDate。

    var dateToday = new Date(); 
    $(function() {
        $( "#datepicker" ).datepicker({
            numberOfMonths: 3,
            showButtonPanel: true,
            minDate: dateToday
        });
    });
    

    就是这样......上面的答案真的很有帮助......继续努力......

    【讨论】:

    • 这对我有用。谢谢
    【解决方案3】:
    $('#datepicker-dep').datepicker({
        minDate: 0
    });
    

    minDate:0 为我工作。

    【讨论】:

      【解决方案4】:

      使用“minDate”选项限制允许的最早日期。 值“0”表示今天(从今天起 0 天):

          $(document).ready(function () {
              $("#txtdate").datepicker({
                  minDate: 0,
                  // ...
              });
          });
      

      这里的文档:http://api.jqueryui.com/datepicker/#option-minDate

      【讨论】:

        【解决方案5】:

        只是补充一下:

        如果您还需要防止用户手动输入过去的日期,这是一个可能的解决方案。这就是我们最终要做的(基于@Nicola Peluchetti 的回答)

        var dateToday = new Date();
        
        $("#myDatePickerInput").change(function () {
            var updatedDate = $(this).val();
            var instance = $(this).data("datepicker");
            var date = $.datepicker.parseDate(instance.settings.dateFormat || $.datepicker._defaults.dateFormat, updatedDate, instance.settings);
        
            if (date < dateToday) {
                $(this).datepicker("setDate", dateToday);
            }
        });
        

        如果用户手动输入过去的日期,这会将值更改为今天的日期。

        【讨论】:

          【解决方案6】:

          这个方法很简单

          $('#datepicker').datepicker('setStartDate', new Date());
          

          我们也可以禁用未来的日子

          $('#datepicker').datepicker('setEndDate', new Date());
          

          【讨论】:

            【解决方案7】:

            Live Demo,试试这个,

                $('#from').datepicker(
                 { 
                    minDate: 0,
                    beforeShow: function() {
                    $(this).datepicker('option', 'maxDate', $('#to').val());
                  }
               });
              $('#to').datepicker(
                 {
                    defaultDate: "+1w",
                    beforeShow: function() {
                    $(this).datepicker('option', 'minDate', $('#from').val());
                    if ($('#from').val() === '') $(this).datepicker('option', 'minDate', 0);                             
                 }
               });
            

            【讨论】:

              【解决方案8】:

              设置日期选择器的startDate属性,它可以工作,下面是工作代码

              $(function(){
              $('#datepicker').datepicker({
                  startDate: '-0m'
                  //endDate: '+2d'
              }).on('changeDate', function(ev){
                  $('#sDate1').text($('#datepicker').data('date'));
                  $('#datepicker').datepicker('hide');
              });
              })
              

              【讨论】:

                【解决方案9】:

                通过设置startDate: new Date()

                $('.date-picker').datepicker({
                    defaultDate: "+1w",
                    changeMonth: true,
                    numberOfMonths: 1,
                    ...
                    startDate: new Date(),
                });
                

                【讨论】:

                  【解决方案10】:

                  只需替换您的代码:

                  旧代码:

                  $("#dateSelect").datepicker({
                      showOtherMonths: true,
                      selectOtherMonths: true,
                      changeMonth: true,
                      changeYear: true,
                      showButtonPanel: true,
                      dateFormat: 'yy-mm-dd'
                  
                  });
                  

                  新代码:

                  $("#dateSelect").datepicker({
                      showOtherMonths: true,
                      selectOtherMonths: true,
                      changeMonth: true,
                      changeYear: true,
                      showButtonPanel: true,
                      dateFormat: 'yy-mm-dd',
                      minDate: 0
                  });
                  

                  【讨论】:

                    【解决方案11】:

                    jQuery API documentation - datepicker

                    最小的可选日期。当设置为null 时,没有最小值。

                    支持多种类型:

                    日期:包含最短日期的日期对象。
                    数字:从今天算起的天数。例如,2 代表从今天开始的 two days-1 代表 yesterday
                    字符串: 格式由 dateFormat 选项或相对日期定义的字符串。
                    相对日期必须包含值和周期对;有效期间为y 对应yearsm 对应monthsw 对应weeksd 对应days。例如,+1m +7d 代表来自todayone month and seven days

                    为了不显示今天以外的以前的日期

                    $('#datepicker').datepicker({minDate: 0});
                    

                    【讨论】:

                      【解决方案12】:

                      "mindate" 属性应该用于禁用 jquery datepicker 中传递的日期。

                      minDate: new Date() 或 minDate: '0' 是这个的关键。

                      Ex:
                      
                      $(function() {
                          $( "#datepicker" ).datepicker({minDate: new Date()});
                      });
                      

                      $(function() {
                        $( "#datepicker" ).datepicker({minDate: 0});
                      });
                      

                      【讨论】:

                        【解决方案13】:

                        你可以简单地使用

                        startDate: 'today'
                        

                        它对我来说很好用。

                        【讨论】:

                          【解决方案14】:

                          我创建了禁用上一个日期、禁用灵活周末(如周六、周日)的功能

                          我们使用的是jQuery UI datepicker插件的beforeShowDay方法。

                          <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
                          var NotBeforeToday = function(date) {
                          		var now = new Date(); //this gets the current date and time
                          		if (date.getFullYear() == now.getFullYear() && date.getMonth() == now.getMonth() && date.getDate() >= now.getDate() && (date.getDay() > 0 && date.getDay() < 6) )
                          			return [true,""];
                          		if (date.getFullYear() >= now.getFullYear() && date.getMonth() > now.getMonth() && (date.getDay() > 0 && date.getDay() < 6))
                          			return [true,""];
                          		if (date.getFullYear() > now.getFullYear() && (date.getDay() > 0 && date.getDay() < 6))
                          			return [true,""];
                          		return [false,""];
                          	}
                          
                          
                          jQuery("#datepicker").datepicker({
                          		beforeShowDay: NotBeforeToday
                              });

                          今天的日期是 9 月 15 日。我已禁用周六和周日。

                          【讨论】:

                            【解决方案15】:

                            您必须将当前日期声明为这样的变量

                             $(function() {
                                var date = new Date();
                                var currentMonth = date.getMonth();
                                var currentDate = date.getDate();
                                var currentYear = date.getFullYear();
                                $('#datepicker').datepicker({
                                minDate: new Date(currentYear, currentMonth, currentDate)
                                });
                            })
                            

                            【讨论】:

                              【解决方案16】:
                              $( "#date" ).datetimepicker({startDate:new Date()}).datetimepicker('update', new Date());
                              

                              new Date() : 函数获取今天的日期 上一个日期被锁定。 100% 正常工作

                              【讨论】:

                                猜你喜欢
                                • 2015-12-30
                                • 2023-03-13
                                • 1970-01-01
                                • 1970-01-01
                                • 1970-01-01
                                • 1970-01-01
                                • 1970-01-01
                                • 1970-01-01
                                • 1970-01-01
                                相关资源
                                最近更新 更多