为什么PHP在2017-01-01回归第52周

时间:2017-07-13 21:29:36

标签: php datetime

为什么following code会返回2017-52而不是预期2017-01

date('Y-W', strtotime('2017-01-01')); // returns "2017-52"

编辑: 正如here所述,有适用于一年中第一周的规则。不幸的是,此行为可能导致日期FROM变得大于日期TO。为了解决这个问题,我使用以下代码来计算周:

function getWeek($timestamp)
{
    $ts1 = mktime(0,0,0,1,1,date('Y', $timestamp));
    $ts2 = mktime(0,0,0,date('n', $timestamp),date('j', $timestamp),date('Y', $timestamp));
    $days = ceil(($ts2 - $ts1) / 86400);
    $week = ceil($days / 7);
    $yearWeek = date('Y', $timestamp).'-'.str_pad($week, 2, '0', STR_PAD_LEFT); // gives 2017-00 for January 1st
    return $yearWeek;
}

1 个答案:

答案 0 :(得分:4)

因为1月1日是星期日,所以前一周(52)是返回的。从docs - W是ISO-8601周的一年中的数字,从星期一开始的几周

enter image description here