我注意到strtotime()
以奇怪的方式处理unix时间戳,如果有人知道原因,我很好奇:
var_export(strtotime('1330725042')); // false
var_export(strtotime('@1330725042')); // 1330725042
为什么strtotime()
在给定unix时间戳时返回false
(除非所说的时间戳以@
为前缀)?
这是我构建的库方法的内部结构,旨在将未知格式的变量“解析”为时间戳。在这种情况下使用裸strtotime()
没有帮助,因为当传入值实际上是时间戳时,它会返回错误的结果。
我已经重新设计了库方法,以便对类似时间戳的值进行显式检查,并且不加修改地返回它,所以我们应该说,这个问题已经没有实际应用了。我只是好奇。
答案 0 :(得分:5)
strtotime()
收到的字符串必须采用特定格式。 http://www.php.net/manual/en/datetime.formats.php
如果strtotime()
无法识别输入格式,则返回FALSE
。由于unix时间只是一个数字序列,除非您明确指定使用的格式,否则它无法正确解析它们。在开始时放置@
为函数提供该序列为unix时间格式的指令。
有关详细信息,请参阅以下文档: http://php.net/manual/en/function.strtotime.php
答案 1 :(得分:2)
可能是因为strtotime
将转换为一个UNIX时间戳,所以它并不期望将其作为参数。
阅读more
答案 2 :(得分:1)
因为strtotime意味着字符串到时间而您的“1330725042”不是时间字符串,而是用引号括起来的unix时间戳。
strtotime()用于“2-March-2012”等值。
如果您已将1330725042作为unix时间戳值,那么为什么需要使用strtotime()?
答案 3 :(得分:1)
strtotime()输出时间戳,其参数应该是日期的文本表示,所以你使用它错了。
答案 4 :(得分:0)
strtotime不识别unix时间戳,但是英文日期或相对时间(如“+1天”或“1个月”)
@p之前的值肯定会在调用中触发php的“忽略错误”模式,(有趣的副作用)因此让不可解析的值返回到var转储。答案 5 :(得分:0)
其他人在使用函数时是正确的,并且它接受字符串而不是时间戳字符串。但是,如果您使用@符号获得结果,则可能是操作员表示以下文本是时间戳,或者该函数根据PHP的标准用法绕过错误。
无论哪种方式,你为什么要对时间戳进行strtotime?
答案 6 :(得分:0)
strtotime()
用于将英文日期格式转换为unix时间戳,因此提供unix时间戳而不是日期格式将不能有效地使用此函数。可以在http://php.net/manual/en/datetime.formats.php
答案 7 :(得分:0)
答案是前导@
表示unix时间戳日期格式,而整数本身是无效的日期格式。见:http://php.net/manual/en/datetime.formats.compound.php
为什么strtotime('@1 a')
给出-3599的非错误结果,但我不知道。洛尔