使用Angular和MomentJS

时间:2017-02-19 15:49:06

标签: javascript angularjs date momentjs

我正在尝试使用AngularJS和MomentJS显示一系列可能的交付日期。 问题是它需要满足某些条件:交货日期仅在周一,周三和周五

此外,当页面加载时,它会识别当前日期,并且只会显示下一个最短24小时的可用日期(例如,如果我在周日下午1点加载页面,第一个可用日期是星期三,因为星期一不符合24小时保证金。)

到目前为止,我只能考虑处理为一周中的每一天做条件的问题,但我很确定必须采用更简洁的方式处理它。

这是我到目前为止所做的:

$scope.today = moment();

$scope.$watch('today', function () {
    if ($scope.today = moment().day('Sunday')){
      $scope.nextdateone = moment().add(3, 'd');
      $scope.nextdatetwo = moment().add(5, 'd');
      $scope.nextdatethree = moment().add(8, 'd');
      $scope.nextdatefour = moment().add(10, 'd');
    }
    else if ($scope.today = moment().day('Monday')){
      $scope.nextdateone = moment().add(2, 'd');
      $scope.nextdatetwo = moment().add(4, 'd');
      $scope.nextdatethree = moment().add(7, 'd');
      $scope.nextdatefour = moment().add(9, 'd');
    }
    else if ...
});

这是我提出的逻辑,但它现在并没有真正起作用......

任何提示?

1 个答案:

答案 0 :(得分:1)

交付日期“星期一,星期三和星期五”,(根据http://momentjs.com/docs/#/get-set/day/),您可以表示为1,3和5。

所以我会创建一个包含这些日期的数组,然后在当天我会迭代这个交付日期数组以找到最合适的日期......这样的事情:

const deliveryDates = [1, 3, 5];

const getDeliveryDate = (today) => {
    let deliveryIndex = -1;

    deliveryDates.some((date, index) => {
        // If today is a delivery date, then schedule for the next delivery
        if (today === date) {
            deliveryIndex = index + 1;
            return true;
        }

        // If today is before the current delivery date, store it
        if (today < date) {
            deliveryIndex = index;
            return true;
        }
    });

    // If delivery date is out of bounds, return the first delivery date   
    return deliveryIndex === deliveryDates.length || deliveryIndex === -1 ? 0 : deliveryIndex;
};

const getNextDelivery = (today) => {
    return deliveryDates[getDeliveryDate(today)];
};

console.log(moment().day(getNextDelivery(moment().day())));

您可以在此处查看一个有效的示例: https://jsbin.com/jawexafiji/edit?js,console