2017-02-19 4 views
0

Я пытаюсь отобразить множество возможных дат доставки с помощью AngularJS и MomentJS. Вопрос заключается в том, что он должен отвечать определенным условиям: Возможны сборы только по понедельникам, средам и пятницам.Отображение следующих доступных дат с 24-часовой маржой с угловым и MomentJS

Кроме того, при загрузке страницы, он распознает текущую дату, и он будет отображать только следующую доступную дату, которая минимум 24 часа прочь (например, если я загрузить страницу в воскресенье в 1pm, первая доступная дата будет в среду, так как понедельник не соответствует 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

сроков поставки «по понедельникам, средам и пятницам», которые (в соответствии с 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

Смежные вопросы