1

在下图中,我展示了我实现的2 个 JQuery UI 日期选择器,现在我需要计算选择的 2 个日期之间的周数并将它们放置在该表单中。

我尝试在其中一个日期选择器中使用它

$('#dateF').datepicker({
        dateFormat: 'dd-mm-yy',
        yearRange: '-2:+2',
        changeMonth: true,
        changeYear: true,
        //the code below this coment is the important part
        onSelect: function(date, inst) {
            var week = $.datepicker.iso8601Week(new Date(date));
            alert(week);
        }

所以我可以计算开始周和结束周,然后减去它们。但是我得到几周的方式是给出一些没有任何意义的疯狂结果。如果有人可以帮助我或提供一些解决方法,我不知道我做错了什么,我将非常感激。

在此处输入图像描述

4

2 回答 2

2

我相信问题是在 Datepicker 中处理格式化的日期。所以我尝试将它转换回来并且它有效。试试这个:

  $(function() {
    $( "#from" ).datepicker({
      dateFormat: 'dd-mm-yy',
      yearRange: '-2:+2',
      changeMonth: true,
      changeYear: true   
    });
    $( "#to" ).datepicker({
      dateFormat: 'dd-mm-yy',
      yearRange: '-2:+2',
      changeMonth: true,
      changeYear: true,
      onSelect: function(date, inst) {
        // convert date back to mm/dd/yy and get the week #
        var dateObj = $(this).datepicker( 'getDate' );
        var dateTo = $.datepicker.formatDate('mm/dd/yy', dateObj);
        var weekto = $.datepicker.iso8601Week(new Date(dateTo));

        var dateObj = $('#from').datepicker( 'getDate' );
        var dateFrom = $.datepicker.formatDate('mm/dd/yy', dateObj);
        var weekfrom = $.datepicker.iso8601Week(new Date(dateFrom));

        // subtract last date from first date's week#
        $('#weeks').empty().append(parseInt(weekto-weekfrom));        
      }
    });
  });

HTML:

<label for="from">From</label>
<input type="text" id="from" name="from" />
<label for="to">to</label>
<input type="text" id="to" name="to" />
<br />
Weeks: <span id="weeks"></span>

工作示例

于 2013-06-19T18:02:43.657 回答
0

从日期选择器获取日期、将其转换为文本然后再次将其转换回日期是没有意义的。直接使用即可:

  onSelect: function(date, inst) {
    var weekto = $.datepicker.iso8601Week($(this).datepicker('getDate'));
    var weekfrom = $.datepicker.iso8601Week($('#from').datepicker('getDate'));
    // subtract last date from first date's week#
    $('#weeks').text(parseInt(weekto - weekfrom));        
  }

您还应该交叉填充minDate / maxDate选项以确保有效的日期范围。

于 2013-06-19T22:40:03.767 回答