使用两个JQueryUI Datepicker计算周数

时间:2013-06-19 15:27:02

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

在下面的图片中,我展示了我实施的 2 JQuery UI datepicker ,现在我需要计算所挑选的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);
        }

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

enter image description here

2 个答案:

答案 0 :(得分: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>

Working example

答案 1 :(得分:0)

从datepicker获取 Date ,将其转换为文本然后再将其转换回 Date 是没有意义的。直接使用它:

  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 选项以确保有效的日期范围。