Как разбить дату 20.11.2016 по 20.01.2017?

381
24 ноября 2016, 10:28

Нужно что бы эти даты разбились на составляющие то есть
если 20.11.2016 по 20.01.2017
то '20.11.2016' , '21.11.2016' , '22.11.2016'....и так до '19.01.2017' , '20.01.2017'

в виде js

Пробовал

var d = new Date(2016, 10, 20);
var end = new Date(2017, 01, 20);
var dates = [];
while (d <= end) {
  dates.push(d.toLocaleDateString());
  d.setDate(d.getDate() + 1);
}

но не получается. При new Date(2017, 01, 20) оно показывает не как первый меся а, как второй

Answer 1

var start = '20.11.2016', end = '20.01.2017'; 
var stArr = start.split('.'), endArr = end.split('.'); 
var daysArray = []; 
 
var date = new Date(stArr[2], parseInt(stArr[1]) - 1, parseInt(stArr[0])); 
 
while (true) {   
  var year = date.getFullYear(), month = date.getMonth(), day = date.getDate();   
     
  daysArray.push(("0" + day).slice(-2) + '.' + ("0" + (month + 1)).slice(-2) + '.' + year); 
  date.setDate(date.getDate() + 1); 
   
  if (day == endArr[0] && month == endArr[1] - 1 && year == endArr[2]) {         
    break; 
  }       
} 
 
console.log(daysArray);

здесь

("0" + day).slice(-2) - добавляет ведущий ноль, если в дне число от 1 до 9

("0" + (month + 1)).slice(-2) - добавляет ведущий ноль, если в месяце число от 1 до 9, а также добавляет 1, т.к. отсчет месяцев ведется с нуля

в строке var date = new Date(stArr[2], parseInt(stArr[1]) - 1, parseInt(stArr[0])); делается parseInt если в номере дня или месяца имеется ведущий ноль. Таким образом он обрежется. Плюс в качестве месяца указан parseInt(stArr[1]) - 1, т.к. номер месяца отсчитывается с нуля.

Answer 2

var start = new Date(2016, 10, 20), 
  end = new Date(2017, 01, 20), 
  between = [], 
  year, month, day; 
 
while (start <= end) { 
  var d = (!d) ? start.getDate() : 1; 
  while (true) { 
    if (d != new Date(start.getFullYear(), start.getMonth() - 1, d).getDate() || 
      (start.getFullYear() == end.getFullYear() && start.getMonth() == end.getMonth() && d > end.getDate())) { 
      break; 
    } 
    year = (start.getMonth() == 0) ? start.getFullYear() - 1 : start.getFullYear(); 
    month = (start.getMonth() == 0) ? 12 : ("0" + start.getMonth()).slice(-2); 
    day = ("0" + d).slice(-2); 
    between.push(day + "." + month + "." + year); 
    d++; 
  } 
  start.setMonth(start.getMonth() + 1); 
 
} 
console.log(between);

READ ALSO
wordpress ajax отображение content

wordpress ajax отображение content

Задача: есть блок с картинками, которые являются изображениями разных постов WPБлок the content(); скрыт в CSS

421
Не рендерится google maps

Не рендерится google maps

Почему иногда карта не рендерится, а просто серого цветаЧаще всего случается когда сначала открываешь карту toggleRestsMap = false, потом показать...

363
Почему не работает переменная js?

Почему не работает переменная js?

у меня есть переменная var a которую нужно передать в datepicker datesDisabled: a

661
Как отцентровать карту yandex по нескольким адресам

Как отцентровать карту yandex по нескольким адресам

Есть массив с адресамиКак расставить точки на Yandex карте и отцентровать по ним? Казалось бы стандартная реализация, но ничего толкового найти...

864