2016-12-12 1 views
1

Я выбираю дату в Air Datepicker и пытаюсь сравнить сегодняшнюю дату с выбранной датой, чтобы определить разницу в днях. Так, например, если сегодня 12/11/2016, и я выбираю 12/20/2016, я хочу получить разницу, которая равна 9.Diff не работает в Moment.js

Я продолжаю сталкиваться со следующей ошибкой: «end.diff is а не функция ".

Я раздели следующий код вниз к основам:

HTML

<form> 
    <input id="datereq" name="datereq" type="text" class="dateReq" value="" /> 
</form> 
<div id="selected"></div> 

Jquery

var date = new Date(), 
    disabledDays = [0, 6]; 

$('.dateReq').datepicker({ 
    dateFormat: 'mm/dd/yyyy', 
    minDate: new Date(), 
    language: 'en', 
    autoClose: true, 
    onRenderCell: function(date, cellType) { 
     if (cellType == 'day') { 
      var day = date.getDay(), 
       isDisabled = disabledDays.indexOf(day) != -1; 
      return { 
       disabled: isDisabled 
      }; 
     } 
    }, 

    // Display Appropriate Order Type Options 
    onSelect: function onSelect(fd, date) { 
     var now = moment(new Date()).format('MM/DD/YYYY'), 
      end = fd, 
      days = end.diff(now, 'days'); 
     $('#selected').html('now:' + now + 'end:' + end + 'diff:' + days); 
     //console.log('end:' + end); 
     //console.log('diff:' + days); 
    } 
}); 

Fiddle

https://jsfiddle.net/qn530dpq/

ответ

5

первый аргумент функции onSelect дата как текст - не момент объект. Попробуйте вызвать функцию diff на объект момента, представляющий выбранную дату, и он будет работать. Также вам нужно указать переменную «end», которая, вероятно, является вашим «fd». Проверьте это: https://jsfiddle.net/t9suf65p/

// Initialize Datepicker 
    var date = new Date(), 
    disabledDays = [0, 6]; 

    $('.dateReq').datepicker({ 
     dateFormat: 'mm/dd/yyyy', 
       minDate: new Date(), 
     language: 'en', 
     autoClose: true, 
     onRenderCell: function (date, cellType) { 
      if (cellType == 'day') { 
       var day = date.getDay(), 
        isDisabled = disabledDays.indexOf(day) != -1; 
       return { 
        disabled: isDisabled 
       }; 
      } 
     }, 

     // Display Appropriate Order Type Options 
     onSelect: function onSelect(fd, date) { 
      var selectedDate = moment(fd, 'MM/DD/YYYY'); 
      var now = moment(new Date()); 
      var days = selectedDate.diff(now, 'days'); 
       $('#selected').html('now: ' + now.format('MM/DD/YYYY') + 'end: ' + selectedDate.format('MM/DD/YYYY') + ' diff: ' + days); 
       //console.log('end:' + end); 
       //console.log('diff:' + days); 
     } 
    }); 
+0

Это было наиболее полное/тщательное разрешение к моему вопросу. Благодаря! – dentalhero

3

Функция diff доступна только для объектов момента. Попробуйте вместо этого:

var now = moment(new Date()), 
end = moment(fd), 
days = end.diff(now, 'days'); 
0

Вы можете использовать что-то вроде этого:

$('#datepickerId').datepicker({ 
    onSelect: function() { 
     var date = $(this).datepicker('getDate'); 
     var today = new Date(); 
     var dayDiff = Math.ceil((today - date)/(1000 * 60 * 60 * 24)); 
    } 
});