从下面一行 -
$date = strtotime('-' . (-100) . ' years');
当我在本地代码上尝试此操作时,我得到一个值4654765319
。在实际网站上尝试时,同一行的值$date
为NULL
。这一行不包含任何变量,因此没有其他代码影响它。
如果删除减号-i.e
,我在本地和实时都会得到正确的值$date = strtotime('-' . (100) . ' years');
在两种情况下都给出相同的输出-1656664323
。
有人能说出strtotime()
在-
符号的两个平台上行为不同的原因吗?
感谢。
答案 0 :(得分:3)
很可能,您运行的是32位版本的PHP。请注意PHP documentation:
时间戳的有效范围通常是从星期五,1901年12月13日20:45:54 UTC到星期二,2038年1月19日03:14:07 UTC。 (这些是与32位有符号整数的最小值和最大值相对应的日期。)
您可以使用PHP的DateTime
类:
$date = new DateTime();
$date->modify('-' . (-100) . ' years');
echo $date->format('U');
这是一个明确的问题再现:
答案 1 :(得分:0)
<?php
echo '-' . (-100) . ' years'."\n";
echo '-' . (100) . ' years'."\n";
将打印出来
--100 years
-100 years
第一个显然是错误的日期字符串,strtotime man page表示该函数将返回FALSE
,结果看起来像NULL
,因此您的实际网站工作正常。我不知道为什么你的本地机器不会给出相同的结果 - 比较两台机器之间的配置 - 它们是否运行相同的操作系统和版本?
乔治在下面的提交后,我在我的64位机器上写了一个更完整的测试程序:
<?php
echo '-' . (-100) . ' years'."\n";
echo '-' . (100) . ' years'."\n";
echo ($d1=strtotime('-' . (-100) . ' years'))."\n";
echo ($d2=strtotime('-' . (100) . ' years'))."\n";
echo date('Y-m-d',$d1)."\n";
echo date('Y-m-d',$d2)."\n";
打印出来的
--100 years
-100 years
4654771244
-1656662356
2117-07-03
1917-07-03
我之前从未尝试过,但显然strtotime()
将--100
解释为-(-100)
+100
- 所以我要说你的直播< / em> site是一个无法正常工作的站点,可能是因为它是一个32位环境。