Jerryforce
@Jerryforce

Как вывести даты в заданном диапазоне, конкретных дней недели?

Как вывести даты заданных дней недели до определённой даты? Например:
вторник + среда: 18.07.17 19.07.17 25.07.17 26.07.17 . . .
понедельник + пятница: 17.07.17 21.07.17 24.07.17 28.07.17 . . .
и т.д.

Выбор дней недели осуществляет пользователь.
  • Вопрос задан
  • 320 просмотров
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
Метод объекта Date setDate() устанавливает день месяца, при необходимости обновляя и месяц.

Т.е. алгоритм простой: в включённым дням недели прибавлять по 7 дней, и считывать получившуюся дату.
Примерно так:
/**
 * Make Dates according to selected days of week till the specified date
 * @param Array weekdays: 0 - Sunday, 1 - Monday, ..
 * @param Mixed Date or String - last day of range
 *
 * @return Array of Date objects
 */
function getDates( weekDays, lastDate) {
  if(typeof lastDate === 'string') lastDate = new Date(lastDate);
  
  var today = new Date(), dow, i, D, datesPool = [], result = [];
  today.setHours(0);
  today.setMinutes(0);
  today.setSeconds(0);
  dow = today.getDay(); 
  for(i=0; i<7; i++) {
	  if( !~weekDays.indexOf( (dow + i)%7)) continue;
	  D = new Date();
	  D.setTime( today.getTime());
	  D.setDate( D.getDate() + i);
	  if( D.getTime() > lastDate.getTime()) continue;
	  datesPool.push( D);
  }
  
  if( datesPool.length === 0) return result;
  
  while(true) {
	  for( i = 0; i < datesPool.length; i++) {
		  D = datesPool[i];
		  if( D.getTime() > lastDate.getTime()) return result;
		  if( result.length > 1000) return result;
		  result.push( "" + D.getDate() + "." + (1 + D.getMonth()) + "." + D.getFullYear().toString().substr(2));
		  D.setDate( D.getDate() + 7);
	  }
  }
}

getDates( [2,3], '2017-07-31') // 19.7.17,25.7.17,26.7.17

Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
djQuery
@djQuery
"Кодируем помаленьку" ("Сказка о Тройке")))
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы