在日历中导航时出现奇怪的日期

Weird dates when navigating in a calendar

我使用此代码在从星期一开始的每周日历上来回导航 1 周:

$date = $sysback->input->get("date", false);
$date = ($date) ? $date : date("Y-m-d");

$time = strtotime($date);
$year = date("Y", $time);
$week = date("W", $time);

$date_from = date("Y-m-d", strtotime($year."W".$week));
$date_to = date("Y-m-d", strtotime($year."W".$week." +6days"));

$date_prev = date("Y-m-d", strtotime($year."W".$week." -7days"));
$date_next = date("Y-m-d", strtotime($year."W".$week." +7days"));

但问题是,如果我从本周回到 2014 年,我会得到奇怪的日期:

问题是您混淆了日历年和 ISO 8601 周数。 ISO 周通常跨越日历年边界,因此使用日历年会给你错误的答案,

您需要在 date() 调用中使用 'o' 而不是 'Y' 来确定 $year 这将为您提供与周数匹配的适当年份数

$year = date("o", $time);