Search code examples
phpdatemktime

Get week number (in the year) from a date PHP


I want to take a date and work out its week number.

So far, I have the following. It is returning 24 when it should be 42.

<?php
$ddate = "2012-10-18";
$duedt = explode("-",$ddate);
$date = mktime(0, 0, 0, $duedt[2], $duedt[1],$duedt[0]);
$week = (int)date('W', $date);
echo "Weeknummer: ".$week;
?>

Is it wrong and a coincidence that the digits are reversed? Or am I nearly there?


Solution

  • Today, using PHP's DateTime objects is better:

    <?php
    $ddate = "2012-10-18";
    $date = new DateTime($ddate);
    $week = $date->format("W");
    echo "Weeknummer: $week";
    

    It's because in mktime(), it goes like this:

    mktime(hour, minute, second, month, day, year);
    

    Hence, your order is wrong.

    <?php
    $ddate = "2012-10-18";
    $duedt = explode("-", $ddate);
    $date  = mktime(0, 0, 0, $duedt[1], $duedt[2], $duedt[0]);
    $week  = (int)date('W', $date);
    echo "Weeknummer: " . $week;
    ?>