【发布时间】:2019-12-03 15:37:39
【问题描述】:
我正在使用以下代码从给定日期范围内获取周开始(星期一)和结束日期(星期日)。
function getWeekDates($date, $start_date, $end_date) {
$week = date('W', strtotime($date));
$year = date('Y', strtotime($date));
$month = date('M', strtotime($date));
$from = date("Y-m-d", strtotime("{$year}-W{$week}")); //Returns the date of monday in week
if($from < $start_date) $from = $start_date;
$to = date("Y-m-d", strtotime("{$year}-W{$week}-7")); //Returns the date of sunday in week
if($to > $end_date) $to = $end_date;
$d = date('d', strtotime($from));
return ['week'=>$month."-".$d,'st'=>$from,'end'=>$to];
}
function getWeekDatesArr($start_date = null , $end_date = null) {
$arr = [];
for($date = $start_date; $date <= $end_date; $date = date('Y-m-d', strtotime($date. ' + 7 days'))) {
$list = getWeekDates($date, $start_date, $end_date);
$arr[$list['week']] = ['start'=>$list['st'],'end'=>$list['end']];
}
return $arr;
}
$start_date = '2019-10-14';
$end_date = '2020-01-05';
$dates = getWeekDatesArr($start_date, $end_date);
echo "<pre>";
print_r($dates);
在输出中的最后开始和结束日期是错误的。明年就不显示了
[Dec-23] => Array
(
[start] => 2019-12-23
[end] => 2019-12-29
)
[Dec-14] => Array
(
[start] => 2019-10-14
[end] => 2019-01-06
)
【问题讨论】:
-
2019-12-30搞砸了。如果你echo "$week - $year - $month - $from\n";,你会得到01 - 2019 - Dec - 2018-12-31,因为虽然日期是 2019 年底,但从技术上讲,它是 2020 年的第一周。 -
@aynber 什么是解决方案?
-
我不确定。我可以看到问题,但我不知道如何解决它。使用 DateTime 类可能会有所帮助。