【问题标题】:JQuery datepickers- setting end date from a start dateJQuery datepickers-从开始日期设置结束日期
【发布时间】:2015-02-27 13:03:06
【问题描述】:

有两个 Jquery 日期选择器在使用,StartDate 和 EndDate

<input id="StartDate" class="datepicker setNext hasDatepicker" type="text" value="13/02/2015" name="StartDate">
<input id="EndDate" class="datepicker hasDatepicker" type="text" value="15/02/2015" name="EndDate">

选择初始化DatePicker时,我希望Enddate DatePickers成为StartDate + 1天,并使其成为如此之前无法在Enddate中选择的日期而不是StartDate。

我有这个代码:

$(function () {
    $(".datepicker").datepicker({
        dateFormat: 'dd/mm/yy',
        onSelect: function( selectedDate ) {
            if(this.id == 'StartDate') {
                var minDate = selectedDate + 1;
                $('#to').datepicker("option", "minDate", minDate);

            }
        }
   });
});

所以它击中了 onSelect ok,但随后将 1 添加到日期不起作用(我只得到末尾带有 1 的日期字符串,所以 '31/12/20141')。

我还在 OnSelect 中尝试了以下操作,假设 selectedDate 是字符串而不是日期类型:

                var minDate = new Date(selectedDate);
                var tomorrow = new Date();
                tomorrow.setDate(minDate.getDate() + 1);
                $('#to').datepicker("option", "minDate", tomorrow);

minDate 最终成为无效日期,明天也是如此。我不知道如何从字符串中设置日期。尝试以下方式:

var minDate = selectedDate.getDate();

给我一​​个“未捕获的类型错误:未定义不是函数”。

使用 JQuery 1.11.1,英国日期格式 dd/mm/yyyy。

【问题讨论】:

  • 如果你尝试这样的事情会发生什么: var date2 = $('#StartDate').datepicker('getDate', '+1d');你会得到 date2 的有效日期吗?
  • 将字符串解析为日期不使用您的显示格式,因此dd/mm/yynew Date(selectedDate) 中返回无效日期

标签: javascript jquery jquery-ui datepicker


【解决方案1】:

如果你想改变另一个 datepicker 添加一天的 datepicker 日期,你可以这样做:

注意 selectedDate 的格式为 dd/mm/YYYY,这不是在 Date 构造函数中使用的有效字符串日期格式。然后你必须解析它。

        var arr = selectedDate.split("/");
        var date = new Date(arr[2]+"-"+arr[1]+"-"+arr[0]);
        var d = date.getDate();
        var m = date.getMonth();
        var y = date.getFullYear();
        var minDate = new Date(y, m, d + 1);
        $("#EndDate").datepicker('setDate', minDate);

这里有一个工作示例fiddle

【讨论】:

  • 我收回那句话... Javascript 库太疯狂了 :)
  • @TrueBlueAussie 我知道 :) 谢谢!
  • 添加了我自己的版本,使用getDate() + 1 看起来不那么疯狂(但是是的,你的也可以):)
  • 删除了我自己的答案,因为整个 setDate(getDate() + 1) 似乎已损坏。
  • @TrueBlueAussie 您遇到的问题如下。如果您没有创建 Date 对象并选择了年份和月份,它将假定您要使用当前月份和年份,从而导致我看到的 12 和 2014 年。这就是为什么您在我的帖子中提到的“奇怪”根本不是奇怪的原因。您使用所需的月份和年份创建对象,并在当天添加一天。该对象足够聪明,可以确定 29 表示当前月份+1,并将天重置为 1。好吧,我认为它是这样工作的。
【解决方案2】:

这里我只让用户选择 10 天的间隔..您可以根据您的要求进行修改。

$(document).ready(function() {
    var minDate ;
    var maxDate;
    var mDate
    var j = jQuery.noConflict();
    j( "#startTime" ).datepicker({
    onSelect: function() {
    minDate = j( "#startTime" ).datepicker("getDate");
    var mDate = new Date(minDate.setDate(minDate.getDate()));
    maxDate = new Date(minDate.setDate(minDate.getDate() + 10));
j("#endTime").datepicker("setDate", maxDate);
j( "#endTime" ).datepicker( "option", "minDate", mDate);
j( "#endTime" ).datepicker( "option", "maxDate", maxDate);
}
});
var tdate = new Date();
var ddate = new Date(tdate.setDate(tdate.getDate() + 10));
j("#startTime").datepicker("setDate", new Date());
j( "#endTime" ).datepicker();
j("#endTime").datepicker("setDate",ddate);
  });
 <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.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><div>Please Select Dates:</div>
	 <p>Strat Date:<input id ="startTime" type="text" ></input></p>
	 <p>End Date:<input id ="endTime" type="text" ></input></p>

【讨论】:

    【解决方案3】:

    您可以使用 setDategetDate

    例子:

    <input id="StartDate" class="datepicker setNext hasDatepicker" type="text" value="13/02/2015" name="StartDate">
    <script>
    function convertInputtoDate(){
        var input = document.getElementById("StartDate").value;
        var date = input.split('/');
        var selectdate = new Date(date[2], date[1], date[0]);
    
        return selectdate;
    }
    var today = convertInputtoDate();
    var tomorrow = new Date(convertInputtoDate());
    tomorrow.setDate(today.getDate() + 1);
    alert('Today : ' + today + ' Tommorow :' + tomorrow.toLocaleString());
    </script>
    

    如果要更改日期格式,请使用:

    tomorrow.toLocaleString(); // output will be : d/m/Y H:M:S
    

    并将您的输入转换为日期:

    function convertInputtoDate(){
        var input = document.getElementById("StartDate").value;
        var date = input.split('/');
        var selectdate = new Date(date[2], date[1], date[0]);
    
        return selectdate;
    }
    

    【讨论】:

    • 是的,但您需要将此应用于特定问题,因为 dd/mm/yy 日期格式也是一个问题。
    • 可以使用明天.toLocaleString()
    • 那仍然不符合问题...您需要选择开始日期,而不是今天。尝试完成一个 JSFiddle。
    • 您需要确保您的答案与所提出的问题相符。建议您创建一个与所示示例匹配的 JSFiddle。
    猜你喜欢
    • 2014-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多