为什么去年的一周没有在PHP中自动更改?

I'm trying to create a calendar like page. A user can press a button with a yearnumber (i.e. 2017). When it's pressed, a session is set to 2017, the page reloads and the function week_date calculates the total number of weeks in the chosen year.

The same function is used for the months.

This works all fine, except for one thing. The first week and the last week of a year contains days from another year. For example: 2017 started on sunday. All other days (monday till saturday) where 2016. Now, my script doesn't change the year to 2016 for those days. It keeps 2017, so instead of

  • saturday 31-12-2016
  • sunday 01-01-2017

it echoes

  • saturday 31-12-2017
  • sunday 01-01-2017

Same goes for december and the remaining days of that week that are in january already.

What am I missing?

My code

$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);
}