Diff 不是 Moment.js 中的函数

新手上路,请多包涵

我在 Air Datepicker 中选择一个日期,并尝试将今天的日期与所选日期进行比较以确定天数差异。因此,例如,如果今天是 12/11/2016 而我选择 12/20/2016,我想得到差值,即 9。

我不断遇到以下错误:“end.diff 不是函数”。

我已将以下代码精简为基本要素:

HTML

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

查询器

 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);
     }
 });

小提琴

https://jsfiddle.net/qn530dpq/

原文由 dentalhero 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 377
2 个回答

onSelect 函数的第一个参数是文本形式的日期 - 而不是 moment 对象。尝试在代表所选日期的 moment 对象上调用 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);
        }
    });

原文由 Tobias W 发布,翻译遵循 CC BY-SA 3.0 许可协议

diff 函数仅适用于 moment 对象。试试这个:

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

原文由 Oscar Siauw 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题