如何使用moment.js获取日期范围

13 html javascript jquery angularjs

这是我的html页面

<tr ng-show="option == 'Yearly' || option == 'Date'">
            <td>
                <label>From:</label>
            </td>
            <td>
                <input type="text" ng-model="fromdate" id="from" date-picker date-type="from" month-directive />
                {{fromdate}}
            </td>

            <td>
                <label>To:</label>
            </td>
            <td>
                <input id="todate" type="text" ng-model="todate" date-picker date-type="to" month-directive />
                {{todate}}
            </td>

        </tr>
Run Code Online (Sandbox Code Playgroud)

这是我的指示

app.directive('monthDirective', function () {

return {

    restrict:'A',
    link: function (scope, elem) {
        var fromDate, toDate;
        scope.$watch('fromdate', function (newValue, oldValue) {
            fromDate = newValue;
            console.log('fromDate', newValue);
        });
        scope.$watch('todate', function (newValue, oldValue) {
            todate = newValue;
            console.log('todate', newValue);
        });

        var range = moment().range(fromDate, toDate);
        var diff = moment.preciseDiff(fromDate,toDate);
        console.log('Range', range);
        console.log('diff', diff);
    }
}
Run Code Online (Sandbox Code Playgroud)

})

我需要使用mument.js获取fromdate和todate之间的范围.任何人都可以建议如何在我的方案中这样做.提前致谢

kiw*_*ple 10

我知道这是一个旧的/已回答的问题,但是由于它位于 google 的顶部,因此这里是如何仅使用moment(和不使用moment-range)来实现日期范围:

import moment from 'moment'

/**
 * @param {date|moment} start The start date
 * @param {date|moment} end The end date
 * @param {string} type The range type. eg: 'days', 'hours' etc
 */
function getRange(startDate, endDate, type) {
  let fromDate = moment(startDate)
  let toDate = moment(endDate)
  let diff = toDate.diff(fromDate, type)
  let range = []
  for (let i = 0; i < diff; i++) {
    range.push(moment(startDate).add(i, type))
  }
  return range
}
Run Code Online (Sandbox Code Playgroud)

返回两者之间的每个“类型”(月/日/小时等)的数组,不包括结束日期

例子:

let range = getRange('2019-01-01', '2019-01-05', 'days')
// moment dates -> [ '2019-01-01', '2019-01-02', '2019-01-03', '2019-01-04' ]
Run Code Online (Sandbox Code Playgroud)


saj*_*raj 9

要在两个日期之间获得剩余的日期,您可以参考此代码 -

$scope.dateArr = []; //Array where rest of the dates will be stored

$scope.prevDate = moment().subtract(15, 'days');//15 days back date from today(This is the from date)

$scope.nextDate = moment().add(15, 'days');//Date after 15 days from today (This is the end date)

//extracting date from objects in MM-DD-YYYY format
$scope.prevDate = moment($scope.prevDate._d).format('MM-DD-YYYY');
$scope.nextDate = moment($scope.nextDate._d).format('MM-DD-YYYY');

//creating JS date objects
var start = new Date($scope.prevDate);
var end = new Date($scope.nextDate);

//Logic for getting rest of the dates between two dates("FromDate" to "EndDate")
while(start < end){
   $scope.dateArr.push(moment(start).format('ddd DD-MM'));
   var newDate = start.setDate(start.getDate() + 1);
   start = new Date(newDate);  
}

console.log('Dates:- ');
console.log($scope.dateArr);
Run Code Online (Sandbox Code Playgroud)

这是控制台日志: -

["星期二24-05","星期三25-05","星期四26-05","星期五27-05","星期六28-05","太阳29-05","星期一30-05", "星期二31-05","星期三01-06","星期四02-06","星期五03-06","星期六04-06","星期日05-06","星期一06-06","星期二07-06","星期四08-06","星期四09-06","星期五10-06","星期六11-06","太阳12-06","星期一13-06","星期二14-06","星期三15-06","星期四16-06","星期五17-06","星期六18-06","太阳19-06","星期一20-06","星期二21" -06","星期三22-06"]


Que*_*ger 5

你可以做这样的事情来获得天数的差异:

var fromDate = moment();
var toDate = moment().add(15, 'days');

var range = moment().range(fromDate, toDate);
var diff = range.diff('days');

var array = range.toArray('days');
$.each(array, function(i, e) {
  $(".container").append("<li>" + moment(e).format("DD MM YYYY") + "</li>");
});

console.log('Range', range);
console.log('diff', diff);
Run Code Online (Sandbox Code Playgroud)

编辑

我为toArray函数添加了一个小例子:

https://jsfiddle.net/Tintin37/19n5ykzs/

  • 仅用于记录方法 `range` 是一个单独的 MomentJs 插件。要安装它`npm install moment-range` 然后是`npm install moment-range` 并添加到代码`const Moment = require('moment'), MomentRange = require('moment-range'), moment = MomentRange。扩展时刻(时刻);` (4认同)

Aut*_*oxy 5

const getDaysRange = (date1, date2) => {
  if (date1 && date2) {
    return Math.abs(moment(date2).diff(moment(date1), 'days')) + 1;
  }

  return undefined;
};
Run Code Online (Sandbox Code Playgroud)

  • 如果您能解释一下您的代码为何有效,那就更好了。 (5认同)
  • 代码尽可能简单,你需要什么解释? (3认同)