每月PHP第一周的数字

时间:2018-09-06 13:10:23

标签: php

别以为我可以在这个论坛上找到这个答案。

如何获取每月从星期一开始的每个月的第一周编号。这个月的第一周是36怎么得到?有此代码。但是不行。

//get first week number in month

   $month = 9;
$year = 2018;
$day = 1;
$firstday = new DateTime("$year-$month-1");

$dow = (int)$firstday->format('w');

$firstday->add(new DateInterval('P' . ((8 - $dow) % 7) . 'D'));

$weeknumber = $firstday->format('W');

echo      $weeknumber    ;

1 个答案:

答案 0 :(得分:2)

我认为这段代码可以满足您的需求。它首先在该月的第一天创建一个DateTime对象,然后将日期向前移动到星期一。最后,它使用format('W')打印一年中的星期。

修改

更新后的代码可打印出全年的第一个星期一和星期几

$year = 2018;
echo "Month | First Monday | Week\n";
for ($month = 1; $month <= 12; $month++) {
    $firstday = DateTime::createFromFormat('Y-n-j', "$year-$month-1");
    $dow = (int)$firstday->format('w');
    // update to a monday (day 1)
    $firstday->add(new DateInterval('P' . ((8 - $dow) % 7) . 'D'));
    echo sprintf("%5d |  %s  | %4d\n", $month, $firstday->format('Y-m-d'), $firstday->format('W'));
}

输出:

Month | First Monday | Week
    1 |  2018-01-01  |    1
    2 |  2018-02-05  |    6
    3 |  2018-03-05  |   10
    4 |  2018-04-02  |   14
    5 |  2018-05-07  |   19
    6 |  2018-06-04  |   23
    7 |  2018-07-02  |   27
    8 |  2018-08-06  |   32
    9 |  2018-09-03  |   36
   10 |  2018-10-01  |   40
   11 |  2018-11-05  |   45
   12 |  2018-12-03  |   49