Я хочу получить число недель для заданных двух дат, т.е. с 2012-01-01 по 2012-12-31. Номера недель должны падать точно в диапазоне, как указано выше. Можете ли вы дать предложения для этого.
Что-то вроде этого должно работать нормально:
<?php $startDateUnix = strtotime('2012-01-01'); $endDateUnix = strtotime('2013-01-01'); $currentDateUnix = $startDateUnix; $weekNumbers = array(); while ($currentDateUnix < $endDateUnix) { $weekNumbers[] = date('W', $currentDateUnix); $currentDateUnix = strtotime('+1 week', $currentDateUnix); } print_r($weekNumbers); ?>
ДЕМО .
Выход :
Array ( [0] => 52 [1] => 01 [2] => 02 ......... [51] => 51 [52] => 52 )
Я думаю, вам нужно что-то подобное с помощью DateTime:
$first_date = new DateTime(); $last_date = new DateTime('-50 weeks'); $days_array = array(); foreach(new DatePeriod($first_date, new DateInterval('P1D'), $last_date) as $date) { $days_array[] = $date->format('W'); }
Что-то вроде этого должно делать:
$start = '2012-01-01'; $end = '2012-12-31'; $dates = range(strtotime($start), strtotime($end),604800); $weeks = array_map(function($v){return date('W', $v);}, $dates); // Requires PHP 5.3+ print_r($weeks);
Сделайте что-то вроде этого:
[REMOVED]
РЕДАКТИРОВАТЬ
<?php for($w = strtotime($start_date); $w <= strtotime($end_date); $w += 7 * 24 * 3600) { echo date("W", $w) . '<br />'; } ?>
Вы можете получить количество недель между двумя датами, используя функцию week_beween_dates () ниже.
function weeks_beween_dates($d1,$d2) { $t1 = strtotime($d1); $t2 = strtotime($d2); $now = $t1; $out = array(); while ($now <= $t2) { $out[] = date('W', $now); $now = strtotime('+1 week', $now); } return $out; } print_r( weeks_beween_dates('2015-01-01','2015-12-31') ); // 01..53 print_r( weeks_beween_dates('2016-01-01','2016-12-31') ); // 01..52