strtotime(' ') 和 strtotime('.') 为什么会返回时间戳?

7

在使用PHP中的strtotime()时,我发现当你传入空格或点时,它会返回一个有效的时间戳。

var_dump(strtotime(" "));
var_dump(strtotime("."));
var_dump(strtotime(". .. .. .. .... .. . .. ."));

输出:

int 1443009652
int 1443009652
int 1443009652

为什么PHP认为这是有效的?


4
有趣的问题:为什么你要这样做? - RiggsFolly
1
根据文档,如果无法将某个内容解析为日期/时间,则应返回“false”。 - JurrieG
2
如果你认为这是不正确的行为,那就提一个错误吧。 - Mark Baker
1
是的,但为什么呢? strotime("bogus"); 返回预期的 FALSE。我也会期望 ". . . ... .. " 返回 FALSE,因为我看不出它可解析为接近日期/时间的内容。 - JurrieG
1
也许是因为日期格式中通常会使用点、逗号、空格、斜杠、破折号等作为分隔符,而这些字符都可以传递给strtotime()函数,而strtotime("bogus")则完全由字母组成...但是如果不深入研究PHP源代码,你就无法得到答案,只能进行猜测。 - Mark Baker
显示剩余6条评论
1个回答

2
最简单的答案是它们中的一些是“false”。
var_dump(DateTime(false)); // date shown is current time

我猜测解析器(试图清理各种可接受的输入)会剥离掉点号(如果它们没有被用作分隔符),只留下一个空字符串。这是唯一有意义的解释。

echo strtotime('1.1.2000'); // outputs 946681200

1
这可能是情况。我期望 strtotime(' ')strtotime('') 会给出相同的输出,但实际上并不是这样。 我将提交一个错误报告,看看他们能否澄清这种行为。 - JurrieG
在哪个版本中 echo strtotime(false); 返回时间戳?我在这里测试得到了 false。php5.6.8 - rray
我没有兴趣去查看这个函数http://lxr.php.net/xref/PHP_5_2/ext/date/php_date.c#1125和php 5.1.0 http://pastebin.com/LYE0n7g3,也许你有。 - NullPoiиteя
我现在会将您的答案标记为正确的。我已经提交了一个错误报告,但目前还没有任何反应。 - JurrieG

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接