我注意到 strtotime()
以一种奇怪的方式处理 unix 时间戳,我很好奇是否有人知道这是为什么:
var_export(strtotime('1330725042')); // false
var_export(strtotime('@1330725042')); // 1330725042
为什么在给定 unix 时间戳时 strtotime()
返回 false
(除非所述时间戳以 @
为前缀)?
这是我构建的库方法的内部结构,旨在将未知格式变量“解析”为时间戳。在这种情况下使用裸 strtotime()
没有帮助,因为当传入值实际上是时间戳时它会返回错误的结果。
我重新设计了库方法来显式检查类似时间戳的值并将其原封不动地返回,所以……我们应该说,这个问题不再有实际应用;我只是好奇。
最佳答案
strtotime()
接收的字符串必须采用特定格式。 http://www.php.net/manual/en/datetime.formats.php
如果 strtotime()
不能识别输入格式,它返回 FALSE
。由于 unix 时间只是一个数字序列,除非您明确指定您使用的格式,否则它无法正确解析它们。将 @
放在开头会向函数指示此序列采用 unix 时间格式。
有关更多信息,请参阅文档: http://php.net/manual/en/function.strtotime.php
关于php - 为什么 unix 时间戳需要以 '@' 为前缀才能让 strtotime() 理解它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9540894/