我正在尝试使用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 ...
});
这是我提出的逻辑,但它现在并没有真正起作用......
任何提示?
答案 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