PHP似乎正在返回不正确的工作日

时间:2013-04-23 16:10:53

标签: php date datetime

首先,这是我的代码:

<?php
$year = 1006;
while ($year <= 1996)
{
    $date = '1/26/' . $year;
    if (date('l', strtotime($date)) == 'Monday')
    {
        echo $date . PHP_EOL;
    }

    $year += 10;
}
?>

这应该输出1000到1999之间的1月26日,其中年份以6结束,日期在星期一。这是输出:

1/26/1006
1/26/1096
1/26/1136
1/26/1186
1/26/1226
1/26/1316
1/26/1366
1/26/1406
1/26/1496
1/26/1536
1/26/1586
1/26/1626
1/26/1756
1/26/1846
1/26/1976

一切似乎都很好。但是,当我在timeanddate.com上查看这些年中的一些时,工作日似乎没有任何共同之处:

1/26/1006属于星期六

1/26/1406属于星期二

1/26/1756确实属于星期一

这里发生了什么?

1 个答案:

答案 0 :(得分:3)

strtotime()将日期的字符串表示形式转换为unix时间戳 - 自1970年1月1日以来的秒数。您可能会在这里开始看到问题...

时间戳通常以32位整数存储,其范围介于1970和2038之间。尝试为该范围之外的日期生成时间戳将为您提供未定义的行为。

- 编辑 -

从php手册:

  

时间戳的有效范围通常来自1901年12月13日星期五   20:45:54 GMT到星期二,2038年1月19日03:14:07 GMT。 (这些是日期   对应于32位带符号的最小值和最大值   整数)。但是,在PHP 5.1.0之前,这个范围是有限的   某些系统(例如Windows)上的01-01-1970至19-01-2038。