Как перебрать массив?

252
20 августа 2018, 16:30

Мне нужно перебрать массив из двух значений, чтобы на выходе получить все значения между ними. Например: ['10-07-2018', '18-07-2018'] = > ['11-07-2018', '12-07-2018', '13-07-2018', '14-07-2018', '15-07-2018', '16-07-2018', '17-07-2018'] Каким методом так можно сделать? + мне нужно будет проверять когда закончится месяц, чтобы переходить на следующий.

$(document).ready(function () { 
   
  var arr = ['10-07-2018', '18-07-2018']; 
   
   
   
  console.log(arr); 
     
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

Answer 1

В javascript с таким форматом работать не получиться:

"DD-MM-YYYY" формат вернет undefined. Некоторые браузеры будут пытаться прочитать данный формат, но некоторые просто вернут NaN

Используйте международный формат, универсальное решение:

const getDates = function(startDate, endDate) { 
  var dates = [], 
    currentDate = startDate, 
    addDays = function(days) { 
      var date = new Date(this.valueOf()); 
      date.setDate(date.getDate() + days); 
      return date; 
    }; 
  while (currentDate <= endDate) { 
    currentDate = `${currentDate.getMonth() + 
      1}-${currentDate.getDate()}-${currentDate.getFullYear()}`; 
    dates.push(currentDate); 
    currentDate = addDays.call(currentDate, 1); 
  } 
  return dates; 
}; 
 
let datesArray = ["2018-07-10", "2018-07-18"]; 
datesArray = [...getDates(new Date(datesArray[0]), new Date(datesArray[1]))]; 
console.log(datesArray);

В любом случае вы потом можете элементы массива после того, как его получили, перевести в любой другой формат.

Все таки нашел способ работать с "DD-MM-YYYY" форматом:

const getDates = function(startDate, endDate) { 
  var dates = [], 
    currentDate = startDate, 
    addDays = function(days) { 
      var date = new Date(this.valueOf()); 
      date.setDate(date.getDate() + days); 
      return date; 
    }; 
  while (currentDate <= endDate) { 
    let formatedDate = `${('0' + currentDate.getDate()).slice(-2)}-${('0' + (currentDate.getMonth()+1)).slice(-2)}-${currentDate.getFullYear()}`; 
    dates.push(formatedDate); 
    currentDate = addDays.call(currentDate, 1); 
  } 
  return dates; 
}; 
 
let dateArray = ["07-07-2018", "11-07-2018"]; 
dateArray = [ 
  ...getDates( 
    new Date(dateArray[0].replace(/(\d{2})-(\d{2})-(\d{4})/, "$2/$1/$3")), 
    new Date(dateArray[1].replace(/(\d{2})-(\d{2})-(\d{4})/, "$2/$1/$3")) 
  ) 
]; 
console.log(dateArray);
Работает отлично!

READ ALSO
всплывающая форма jQuery

всплывающая форма jQuery

Да вроде нормально всё

237
Проблема с рендерингом списков в React

Проблема с рендерингом списков в React

Пытаюсь вытащить из API сервиса данные и вставить их в компонент

278
Помощь в поиске плагина для webpack3

Помощь в поиске плагина для webpack3

Нужна помощь в поиске плагина для webpack 3 который будет "пробегать" по указанной в опциях директории, содержащий svg-файлы и компилить файл формата...

274