【问题标题】:JQuery DatePicker not respecting min and max date range settingsJQuery DatePicker 不尊重最小和最大日期范围设置
【发布时间】:2017-10-16 10:17:22
【问题描述】:

在我的 MVC 应用程序中,我有一个函数可以返回我的一个表中的最小和最大日期,我试图使用它们来限制用户可以在 JQuery DatePicker 中选择的日期范围。

该模型有两个 DateTime 类型的属性

[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
    public DateTime HalfHourlyStartDate { get; set; }




    [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
    public DateTime HalfHourlyMinDate { get; set; }

这些是从数据库的后端代码中填充的。然后在页面中,我有两个像这样定义的隐藏字段

 @Html.HiddenFor(x => x.HalfHourlyMinDate)
    @Html.HiddenFor(x => x.HalfHourlyMaxDate)

然后在我的页面中,我有这段代码来设置日期选择器的最小和最大范围

$('.input-group.date').datepicker({
        format: "dd/mm/yyyy",
        todayBtn: true,
        language: "en-GB",
        forceParse: true,
        autoclose: true,
        calendarWeeks: true,
        todayHighlight: true,
        changeMonth: true,
        changeYear: true
    });

    var minDate = new Date($('#HalfHourlyMinDate').val());
    var maxDate = new Date($('#HalfHourlyMaxDate').val());

    $('.input-group.date').datepicker("change", { minDate: minDate });
    $('.input-group.date').datepicker("change", { maxDate: maxDate });

但它不起作用!当我运行我的应用程序时,日期选择器仍然允许无限制的日期选择。当我在这里出错时,谁能告诉我?

*** 我也试过这种方式,但也不管用

$('.input-group.date').datepicker('option', 'minDate', minDate);
    $('.input-group.date').datepicker('option', 'maxDate', maxDate);

**更新

我添加了一个日期函数(在 stackoverflow 上找到),它从隐藏字段中的字符串值创建一个 javascript 日期对象,但它仍然无法工作。

var minDate = compareDate($('#HalfHourlyMinDate').val());
    var maxDate = compareDate($('#HalfHourlyMaxDate').val());
    
 function compareDate(str1) {
        // str1 format should be dd/mm/yyyy. Separator can be anything e.g. / or -. It wont effect
        var dt1 = parseInt(str1.substring(0, 2));
        var mon1 = parseInt(str1.substring(3, 5));
        var yr1 = parseInt(str1.substring(6, 10));
        var date1 = new Date(yr1, mon1 - 1, dt1);
        return date1;
    }   
    

**更新

好的,我现在试过了,但还是不行!有任何想法吗 ?这应该很简单:-)

var minDate = new Date(2017, 9, 9);
    var maxDate = new Date(2017, 10, 9);

    $(".input-group.date").datepicker({
        format: "dd/mm/yyyy",
        todayBtn: true,
        language: "en-GB",
        forceParse: true,
        autoclose: true,
        calendarWeeks: true,
        todayHighlight: true,
        changeMonth: true,
        changeYear: true,
        minDate: minDate,
        maxDate: maxDate
    });

【问题讨论】:

  • 您使用的是什么版本的 jquery 和 jquery-ui?
  • JQuery v3.1.1 和 JQueryUI v1.12.1
  • 老实说,我已经到了放弃它的地步,只是不值得为这个功能付出努力,而且我已经在这方面花费了太多时间。我正在创建有效的日期对象,因此日期选择器可能存在错误,并且无论如何它都不起作用。我真的很感谢你在这方面的帮助,所以谢谢你
  • 好的,终于明白了,我使用的是引导版本,属性是 startDate 和 endDate,现在它可以工作了。虽然肯定有一个错误,因为虽然向前和向后的月份选择器仅显示超过 2 个月(这是我的日期范围),如果您单击箭头所在的位置(空间为空),它仍然会超过我的结束日期

标签: javascript jquery jquery-ui-datepicker


【解决方案1】:

确保您的最小和最大日期具有正确的 javascript 格式,在这里您可以看到一个示例以及它是如何正确工作的。

您可以尝试粘贴或修改它,将您从数据库中填充的值放入以尝试修复它。

$( function() {
    const minDate = new Date($("#minDateInput").val());//new Date(2017, 7, 1);
    const maxDate = new Date($("#maxDateInput").val());//new Date(2017, 12, 1);
    
    $( "#datepicker" ).datepicker({ 
        format: "dd/mm/yyyy",
        todayBtn: true,
        language: "en-GB",
        forceParse: true,
        autoclose: true,
        calendarWeeks: true,
        todayHighlight: true,
        changeMonth: true,
        changeYear: true,
        
    minDate: minDate, 
    maxDate: maxDate });
  } );
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
 
 <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
 
 
 <label for="maxDateInput">Min:</label>
 <input type="text" id="minDateInput" name="minDateInput" value="01/01/2017"/>
 
 <label for="maxDateInput">Max:</label>
 <input type="text" id="maxDateInput" name="maxDateInput" value="5/20/2017"/>
 
 
 
 <p>Date: <input type="text" id="datepicker"></p>

【讨论】:

  • 我已经更新了我的问题,但仍然无法正常工作
  • 您是否尝试过硬编码您的最小和最大日期?这样您就可以找到确切的问题所在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多