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

新手上路,请多包涵

这是我的 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>

这是我的指令

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

})

我需要使用 mument.js 获取 fromdate 和 todate 之间的范围。任何人都可以建议如何在我的场景中执行此操作。提前致谢

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

阅读 472
2 个回答

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

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

这是控制台日志:-

[“星期二 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”]

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

我知道这是一个古老的/已回答的问题,但由于它在谷歌的顶部,这里是如何实现日期范围只有 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
}

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

例子:

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

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

推荐问题