Bootstrap日期选择器禁用过去的日期但保留当前日期

42

我想禁用所有当前日期之前的日期,而不是包括当前日期。我正在使用 bootstrap-datepicker 库 "bootstrap-datepicker" 尝试,并且使��以下代码:

$('#date').datepicker({ 
    startDate: new Date() 
});

它运行良好。但是它禁用了今天之前的日期。

比如,如果今天是2013年04月20日,并且我通过设置startDate: new Date()来禁用过去的日期,但我仍然可以选择从2013年04月21日开始的日期。

更新:对于UTC时区,我可以按照以下方式解决:

var d = new Date();
options["startDate"] = new Date(d.setDate(d.getDate() - 1));

或者 startDate: "+0d"

但是当UTC超前一天时,这些方法就不起作用了。对于我在加利福尼亚州的客户来说,这意味着在下午5点后,他无法再选择他当地的当前日期作为有效日期。为了解决这个问题,我现在临时使用 startDate: "-1d",但是在下午5点之前,这意味着昨天是可见的。

有人想出了更好的方法吗?因为我不想告诉用户输入UTC日期。


你是否在使用Bootstrap 2.0.4+和jQuery 1.7.1+? - Praveen Kumar Purushothaman
1
我正在使用Bootstrap v2.2.1和jQuery 1.8.1。 - itskawsar
21个回答

62
var date = new Date();
date.setDate(date.getDate()-1);

$('#date').datepicker({ 
    startDate: date
});

如果时区将来发生变化,会发生什么? - itskawsar
2
我不是完全确定。你可能想看一下这个帖子:需要使用Javascript Date对象显示DST转换期间的本地时间 - Tom Hartman
1
我收到了TypeError:选项startDate未被识别!你知道问题是什么吗? - Himanshu Pandey
你的脚本很简短,但它允许用户选择昨天的日期。但是,这个解决方案有效。希望能有所帮助。 - Shaiju T
有没有办法可以动态地完成这个操作,而不是在选项中设置? - Tristanisginger

25

使用minDate

var date = new Date();
var today = new Date(date.getFullYear(), date.getMonth(), date.getDate());

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

3
为了简便起见,使用 moment.jsminDate: moment() 一样。 - Saahithyan Vigneswaran
1
只是为了让未来的用户知道,这个解决方案是针对另一个插件('bootstrap-datetimepicker')的。 - thargenediad

24

HTML

<input type="text" name="my_date" value="4/26/2015" class="datepicker">

JavaScript

jQuery(function() {
  var datepicker = $('input.datepicker');

  if (datepicker.length > 0) {
    datepicker.datepicker({
      format: "mm/dd/yyyy",
      startDate: new Date()
    });
  }
});

当打开日历时,这将突出显示默认日期为2015年4月26日(Apr 26, 2015),并禁用当前日期之前的所有日期。


19

使用

startDate: '-0d'

喜欢

$("#datepicker").datepicker({
    startDate: '-0d',
    changeMonth: true
});

8
你可以使用数据属性: ```

你可以使用数据属性:

```
<div class="datepicker" data-date-start-date="+1d"></div>

7

var nowDate = new Date();
var today = new Date(nowDate.getFullYear(), nowDate.getMonth(), nowDate.getDate(), 0, 0, 0, 0);
 $('#date').datetimepicker({
  startDate: today
 });


6
解决方法要简单得多:
$('#date').datepicker({ 
    startDate: "now()" 
});

试用在线演示并填写开始日期输入框:now()


只是提供信息,如果需要的话,startDate: "tomorrow"startDate: "yesterday"也可以使用。 - skirato

5
<script type="text/javascript">
$('.datepicker').datepicker({
    format: 'dd/mm/yyyy',
    todayHighlight:'TRUE',
    startDate: '-0d',
    autoclose: true,
})

1
你能解释一下为什么这个方法可行,并且比两年前被接受的答案更好吗? - Mike Cluck

4

4

这是它

 <script>
          $(function () {
              var date = new Date();
              date.setDate(date.getDate() - 7);

            $('#datetimepicker1').datetimepicker({
                maxDate: 'now',
                showTodayButton: true,
                showClear: true,
                minDate: date
            });
        });
    </script>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接