Đoạn mã này sử dụng Chủ nhật làm ngày đầu tiên trong tuần:
$start = new DateTime('2014-10-01');
$end = new DateTime('2014-10-31 23:59');
$interval = new DateInterval('P1D');
$dateRange = new DatePeriod($start, $interval, $end);
$weekNumber = 1;
$weeks = array();
foreach ($dateRange as $date) {
$weeks[$weekNumber][] = $date->format('Y-m-d');
if ($date->format('w') == 6) {
$weekNumber++;
}
}
Mỗi tuần sẽ có tất cả các ngày trong đó.
Nếu bạn chỉ muốn ngày đầu tiên và ngày cuối cùng của mỗi tuần thì bạn chỉ cần sử dụng array_shift
và array_pop
để có được chúng. Ví dụ:trong tuần đầu tiên, bạn có thể sử dụng:
$wk1Start = array_shift($weeks[1]); //gives you first day of week 1
$wk1End = array_pop($weeks[1]); // give you the last day of week 1
Nếu bạn muốn ngày bắt đầu và ngày kết thúc cho mỗi tuần, đây là một cách thực hiện:
$ranges = array_map(function($week) {
return 'start: ' . array_shift($week)
. ', end: ' . array_pop($week); },
$weeks);
Đây là đầu ra của $ranges
cho tôi:
Array
(
[1] => start: 2014-10-01, end: 2014-10-04
[2] => start: 2014-10-05, end: 2014-10-11
[3] => start: 2014-10-12, end: 2014-10-18
[4] => start: 2014-10-19, end: 2014-10-25
[5] => start: 2014-10-26, end: 2014-10-31
)