Как начать и завершить неделю между двумя датами

У меня две даты

$start_date = '2015-09-21'; $end_Date = '2016-09-21'; 

Что я хочу сделать так

 Week = Monday Friday 36 = 2015-09-21 2015-09-25 37 = 2015-09-28 2015-10-02 38 = 2015-10-05 2015-10-09 . . 38 = 2016-09-19 2016-09-24 

Разница в дате может составлять один год или более. То, что мне нужно получить, является точным каждую неделю с понедельника и пятницы между этим временным интервалом.

Я использовал этот метод

 $weeks = array(); while ($start_date < $end_Date ) { $weeks[] = date('W', $start_date ); $start_date += strtotime('+1 week', 0); } function getStartAndEndDate($week, $year) { $time = strtotime("1 January $year", time()); $day = date('w', $time); $time += ((7*$week)+1-$day)*24*3600; $return[0] = date('Ym-d', $time); $time += 6*24*3600; $return[1] = date('Ym-d', $time); return $return; } 

Когда я вызываю эту функцию, мне нужно указать номер недели и год, чтобы получить точные даты. Но я не могу получить год с конкретной недели. Мне удалось получить неделю с даты начала или окончания.

  $current_year = date("Y", strtotime($fromdate)); 

Любой предложил мне получить точный год с номером недели

Related of "Как начать и завершить неделю между двумя датами"

Прежде всего вам нужно преобразовать время в объект, после чего вычислить разницу. Теперь подсчитайте недели между датами. Теперь его цикл времени через недели с даты начала, я использую DateInterval('P4D') чтобы DateInterval('P4D') дату на 4 дня, а затем повторить две даты, а затем DateInterval('P3D') чтобы завершить неделю, и это повторяется.

 $start_date = '2015-09-21'; $end_Date = '2016-09-21'; $date1 = new DateTime($start_date); $date2 = new DateTime($end_Date); $interval = $date1->diff($date2); $weeks = floor(($interval->days) / 7); for($i = 1; $i <= $weeks; $i++){ $week = $date1->format("W"); $date1->add(new DateInterval('P4D')); echo $week." = ".$start_date." - ".$date1->format('Ym-d')."<br/>"; $date1->add(new DateInterval('P3D')); $start_date = $date1->format('Ym-d'); } 

Вывод:

 39 = 2015-09-21 - 2015-09-25 40 = 2015-09-28 - 2015-10-02 41 = 2015-10-05 - 2015-10-09 42 = 2015-10-12 - 2015-10-16 43 = 2015-10-19 - 2015-10-23 44 = 2015-10-26 - 2015-10-30 45 = 2015-11-02 - 2015-11-06 46 = 2015-11-09 - 2015-11-13 47 = 2015-11-16 - 2015-11-20 48 = 2015-11-23 - 2015-11-27 49 = 2015-11-30 - 2015-12-04 50 = 2015-12-07 - 2015-12-11 51 = 2015-12-14 - 2015-12-18 52 = 2015-12-21 - 2015-12-25 53 = 2015-12-28 - 2016-01-01 01 = 2016-01-04 - 2016-01-08 02 = 2016-01-11 - 2016-01-15 03 = 2016-01-18 - 2016-01-22 04 = 2016-01-25 - 2016-01-29 05 = 2016-02-01 - 2016-02-05 06 = 2016-02-08 - 2016-02-12 07 = 2016-02-15 - 2016-02-19 08 = 2016-02-22 - 2016-02-26 09 = 2016-02-29 - 2016-03-04 10 = 2016-03-07 - 2016-03-11 11 = 2016-03-14 - 2016-03-18 12 = 2016-03-21 - 2016-03-25 13 = 2016-03-28 - 2016-04-01 14 = 2016-04-04 - 2016-04-08 15 = 2016-04-11 - 2016-04-15 16 = 2016-04-18 - 2016-04-22 17 = 2016-04-25 - 2016-04-29 18 = 2016-05-02 - 2016-05-06 19 = 2016-05-09 - 2016-05-13 20 = 2016-05-16 - 2016-05-20 21 = 2016-05-23 - 2016-05-27 22 = 2016-05-30 - 2016-06-03 23 = 2016-06-06 - 2016-06-10 24 = 2016-06-13 - 2016-06-17 25 = 2016-06-20 - 2016-06-24 26 = 2016-06-27 - 2016-07-01 27 = 2016-07-04 - 2016-07-08 28 = 2016-07-11 - 2016-07-15 29 = 2016-07-18 - 2016-07-22 30 = 2016-07-25 - 2016-07-29 31 = 2016-08-01 - 2016-08-05 32 = 2016-08-08 - 2016-08-12 33 = 2016-08-15 - 2016-08-19 34 = 2016-08-22 - 2016-08-26 35 = 2016-08-29 - 2016-09-02 36 = 2016-09-05 - 2016-09-09 37 = 2016-09-12 - 2016-09-16 
 $start_date = '2015-09-21'; $end_Date = '2016-09-21'; $startTime = strtotime($start_date); $endTime = strtotime($end_Date); $weeks = array(); $date = new DateTime(); $i=0; while ($startTime < $endTime) { $weeks[$i]['week'] = date('W', $startTime); $weeks[$i]['year'] = date('Y', $startTime); $date->setISODate($weeks[$i]['year'], $weeks[$i]['week']); $weeks[$i]['Monday']=$date->format('Ym-d'); $weeks[$i]['Friday'] = date('Ym-d',strtotime($weeks[$i]['Monday'] . "+4 days")); $startTime += strtotime('+1 week', 0); $i++; } var_dump($weeks); - $start_date = '2015-09-21'; $end_Date = '2016-09-21'; $startTime = strtotime($start_date); $endTime = strtotime($end_Date); $weeks = array(); $date = new DateTime(); $i=0; while ($startTime < $endTime) { $weeks[$i]['week'] = date('W', $startTime); $weeks[$i]['year'] = date('Y', $startTime); $date->setISODate($weeks[$i]['year'], $weeks[$i]['week']); $weeks[$i]['Monday']=$date->format('Ym-d'); $weeks[$i]['Friday'] = date('Ym-d',strtotime($weeks[$i]['Monday'] . "+4 days")); $startTime += strtotime('+1 week', 0); $i++; } var_dump($weeks);