首先,这是我的代码:
<?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确实属于星期一
这里发生了什么?
答案 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。