PHP似乎返回不正确平日
首先,这里是我的代码:PHP似乎返回不正确平日
<?php
$year = 1006;
while ($year <= 1996)
{
$date = '1/26/' . $year;
if (date('l', strtotime($date)) == 'Monday')
{
echo $date . PHP_EOL;
}
$year += 10;
}
?>
据说这是为了输出1000年至1999年一月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下降呢在周一跌倒
这是怎么回事?
strtotime()
日期的字符串表示转换为unix时间戳 - 自1月1日的秒数,1970年你可能开始看到这里的问题...
时间戳通常存储在一个32这个整数的范围在1970到2038之间。尝试为该范围之外的日期生成时间戳会给你未定义的行为。
- 编辑 -
从PHP手册:
时间戳的有效范围通常为星期五,1901年12月13日20时45分54秒 GMT到星期二,1月19日2038 03:14:07 GMT。 (这些日期为 ,对应于32位有符号整数的最小值和最大值)。但是,在PHP 5.1.0之前,在某些系统(例如Windows)上,该范围从 01-01-1970到19-01-2038被限制。
在大多数平台上,PHP使用32位__signed__整数,-ve值在1970之前,1904年为最早的年份;但你说的范围是正确的OP问题 – 2013-04-23 16:19:56
@MarkBaker“在大多数平台上”并不包括窗口和PHP 5.1之前的例子,这是很常见的情况。 env的范围从1970年开始。 – eis 2013-04-23 16:22:06
@SamDufel您可能想要在PHP中添加此时间戳的范围。他们在[这里](http://php.net/manual/en/function.date.php)中提到,在更新日志中。 – eis 2013-04-23 16:23:33
您正在运行32位PHP或64位PHP吗?如果是32位,那么最大支持年份范围是从大约1904年到2032年 – 2013-04-23 16:19:06
是的,我运行32位。 – Joel 2013-04-23 16:31:53