moment.js - получить следующий существующий день массива - PullRequest
0 голосов
/ 02 ноября 2018

У меня есть массив, заполненный разными днями:

let days = ["2018-09-02", "2018-10-06", "2018-10-12", "2018-10-24", "2018-11-02", "2018-11-04"];

Как я могу определить, какой из этих дней является ближайшим днем ​​в будущем от сегодняшнего дня?

Мое текущее состояние может обнаружить, если завтра является частью массива, но я не знаю, как получить ближайший день в будущем, когда завтра не существует.

let nextDay = day.add(1, 'days').format('YYYY-MM-DD');

for (let i = 0; i < days.length; i++) {
  if (day[i] === nextDay) {
    // next day is part of the array
    console.log(nextDay);
  } 
}

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

Можно было бы вычесть каждую дату из текущей даты и посмотреть, какая из них меньше всего положительных дней.

Пример:

let days = ["2018-09-02", "2018-10-06", "2018-10-12", "2018-10-30", "2018-11-02", "2018-11-04", "2019-01-01"];
let curDay = moment().format('YYYY-MM-DD');
let closestDay;
let closestDiff;
for (let i = 0; i < days.length; i++) {
  let diff = moment(days[i]).diff(curDay, 'days'); 
  if(diff > 0){
    if(closestDiff === undefined) {
      closestDay = days[i];
      closestDiff = diff;
    } else if(diff < closestDiff) {
      closestDay = days[i];
      closestDiff = diff;
    }
  }
}
if(closestDay === undefined) closestDay = "no days found in the future";
document.getElementById("closest-future").innerHTML = closestDay;
<!DOCTYPE html>
<html>

  <head>
    <script data-require="moment.js@2.14.1" data-semver="2.14.1" src="https://npmcdn.com/moment@2.14.1"></script>
  </head>

  <body>
    <div>Shortest date in the future is: <span id='closest-future'></span></div>
  </body>

</html>
0 голосов
/ 02 ноября 2018

Предполагая, что массив отсортирован, вы можете сделать следующее:

let days = ["2018-09-02", "2018-10-06", "2018-10-12", "2018-10-24", "2018-11-02", "2018-11-04"];
let today = moment().format('YYYY-MM-DD');
console.log(days.find(d => d > today));
<script src="https://cdn.jsdelivr.net/npm/moment@2.19.3/moment.min.js"></script>
...