在使用PHP中的strtotime()时,我发现当你传入空格或点时,它会返回一个有效的时间戳。
var_dump(strtotime(" "));
var_dump(strtotime("."));
var_dump(strtotime(". .. .. .. .... .. . .. ."));
输出:
int 1443009652
int 1443009652
int 1443009652
为什么PHP认为这是有效的?
var_dump(DateTime(false)); // date shown is current time
我猜测解析器(试图清理各种可接受的输入)会剥离掉点号(如果它们没有被用作分隔符),只留下一个空字符串。这是唯一有意义的解释。
echo strtotime('1.1.2000'); // outputs 946681200
strtotime(' ')
和 strtotime('')
会给出相同的输出,但实际上并不是这样。
我将提交一个错误报告,看看他们能否澄清这种行为。 - JurrieGecho strtotime(false);
返回时间戳?我在这里测试得到了 false。php5.6.8 - rray
strotime("bogus");
返回预期的 FALSE。我也会期望". . . ... .. "
返回 FALSE,因为我看不出它可解析为接近日期/时间的内容。 - JurrieGstrtotime("bogus")
则完全由字母组成...但是如果不深入研究PHP源代码,你就无法得到答案,只能进行猜测。 - Mark Baker