web-dev-qa-db-ja.com

差分はMoment.jsの関数ではありません

Air Datepickerで日付を選択し、今日の日付を選択した日付と比較して、日の違いを判断しようとしています。したがって、たとえば、今日が2016年12月11日で、2016年12月20日を選択した場合、差である9を取得します。

「end.diffは関数ではありません」というエラーが発生し続けます。

私は次のコードを本質的なものまで取り除きました:

[〜#〜] 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);
     }
 });

フィドル

https://jsfiddle.net/qn530dpq/

5
dentalhero

onSelect関数の最初の引数は、テキストとしての日付であり、モーメントオブジェクトではありません。選択した日付を表すmomentオブジェクトでdiff関数を呼び出そうとすると、機能します。また、おそらく「fd」である変数「end」を指定する必要があります。それをチェックしてください: 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);
        }
    });
9
Tobias W

diff関数は、モーメントオブジェクトでのみ使用できます。代わりにこれを試してください:

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

次のようなものを使用できます。

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