为什么是去年';s周在PHP中不会自动更改?

为什么是去年';s周在PHP中不会自动更改?,php,Php,我正在尝试创建一个类似日历的页面。用户可以按带有数字的按钮(即2017)。按下时,会话设置为2017,页面重新加载,函数week\u date计算所选年份的总周数 相同的功能用于月份 这一切都很好,除了一件事。一年的第一周和最后一周包含另一年的天数。例如:2017年从周日开始。2016年的所有其他日期(周一至周六)。现在,我的剧本不会在那些日子里把年份改为2016年。它保持2017年,因此 2016年12月31日星期六 2017年1月1日星期日 它呼应 2017年12月31日星期六 201

我正在尝试创建一个类似日历的页面。用户可以按带有数字的按钮(即2017)。按下时,会话设置为2017,页面重新加载,函数
week\u date
计算所选年份的总周数

相同的功能用于月份

这一切都很好,除了一件事。一年的第一周和最后一周包含另一年的天数。例如:2017年从周日开始。2016年的所有其他日期(周一至周六)。现在,我的剧本不会在那些日子里把年份改为2016年。它保持2017年,因此

  • 2016年12月31日星期六
  • 2017年1月1日星期日
它呼应

  • 2017年12月31日星期六
  • 2017年1月1日星期日
同样的情况也发生在12月和一周中已经在1月的其他日子

我错过了什么

我的代码

$currentJaar = $_SESSION['currentJaar']; 
if (!$currentJaar) {
    $currentJaar = date("Y");
}

function week_date($week, $year, $dagvdweek){
    $date = new DateTime();
    return $date->setISODate($year, $week, $dagvdweek)->format('Y-m-d');
}

function getWeekDays($month, $year)
{
    $p = new DatePeriod(
        DateTime::createFromFormat('!Y-n-d', "$year-$month-01"),
        new DateInterval('P1D'),
        DateTime::createFromFormat('!Y-n-d', "$year-$month-01")->add(new DateInterval('P1M'))
    );

    $datesByWeek = array();
    foreach ($p as $d) {
        $dateByWeek[ $d->format('W') ][] = $d;
    }

    return $dateByWeek;
}

$datesByWeek = getWeekDays($maandNR, $currentJaar);
foreach ($datesByWeek as $week => $dates) {
    $maandag = week_date($week,$currentJaar,1);
    $dinsdag = week_date($week,$currentJaar,2);
    $woensdag = week_date($week,$currentJaar,3);
    $donderdag = week_date($week,$currentJaar,4);
    $vrijdag = week_date($week,$currentJaar,5);
    $zaterdag = week_date($week,$currentJaar,6);
    $zondag = week_date($week,$currentJaar,7);
}

原因很简单:因为您显式地设置了
setISODate($year,$week,$dagvdweek)
,而
$year
总是相同的
$currentJaar
。您知道我的问题中的方法吗?如何解决这个问题?我建议彻底摆脱
week\u date
DatePeriod
已经为您提供了
DateTime
对象,您可以
->直接格式化这些对象。我需要
week\u date
,因为它可以多次使用。生成多个表,所有表都需要给定的周号。至少您调用它的方式有缺陷,在这种情况下是不必要的。同样,它所做的只是格式化给定的日期。您可以直接对
DatePeriod
返回的对象执行此操作。问题是您正在将不一致的数据传递给
周日
,这将解决这一问题。