这个 bug 是我领导发现的。
正常情况下给 strtotime 传数字会被忽略掉,然后返回 false,但今天发现当 strtotime 传入的时间戳大于 1500367000(2017-7-18 16:36:40),函数会返回数字。。。
测了下,php 从 5.3 到 7.1 都有这个 bug,会不会是个巨锅啊。。。
1
justplaymore 2017-07-16 02:17:08 +08:00 1
这不是 bug,1500367000 刚好匹配了一种合法的时间格式:15 时 00 分 36 秒 7000 年(中国标准时间 GMT+0800 ),和返回的结果的时间戳 158748447636 是匹配的。
如果参数是 1400367000 ( 14 时 00 分 36 秒 7000 年 中国标准时间 GMT+0800 ),也可以得到正确返回的,并不是因为参数大于某个值才出现这种结果,而是参数的格式符合某种时间格式的时候,参考下文档,时间和日期格式是可以混合在一起解析的。http://php.net/manual/en/datetime.formats.php |
2
CEBBCAT 2017-07-16 02:17:18 +08:00 via Android
这属于什么测试?超前测试吗? doge
|
3
yaozeyuan93 OP @justplaymore
PHP 开发组回复我了,和你说的一样,确实是这样。 但如果只看文档的话,文档里说支持传入毫秒格式的时间戳,而且会自动忽略掉。20170101 按理说也是正经的毫秒时间戳,但是 strtotime 转换之后又能转成对应的日期,这样在日常使用中会让人很困惑 ![]( ) 我目前正在跑这种有坑的时间戳。目前的结果是如果按 HHMMSSYYYY 这种格式的话,对于所有以 $hh 10~24 $mm 01~02 $ss 36~60 $yyyy 7000~9999 形式构成的时间戳,都会被作为日期进行处理,如果不在这个范围内,则 strtotime 会返回正常值 如果要按这样推的话, 上一个乱纪元结束于 1402609999,2014-6-13 5:53:19 而这次的恒纪元则会在 1500610000,2017-7-21 12:6:40 开始 [捂脸] |
4
justplaymore 2017-07-16 03:16:38 +08:00
@yaozeyuan93 你可能理解错了,strtotime 是参数是时间格式,不是时间戳。Microseconds began to be allowed ,but they are ignored. 这里的微秒是指时间格式里的微秒,而不是微秒级别的时间戳。
http://php.net/manual/en/datetime.formats.time.php 24 Hour Notation Hour, minutes, seconds and fraction 't'? HH [.:] MM [.:] II frac "04.08.37.81412", "19:19:19.532453" |
5
konakona 2017-07-16 04:42:03 +08:00
奇怪,up 主为什么要传你认为是 Unix 时间戳的值给 strtotime()?
|
6
EchoUtopia 2017-07-16 07:43:22 +08:00 via iPhone
据说这类 bug 有点多,我以前也遇到过
|
7
EchoUtopia 2017-07-16 07:44:53 +08:00 via iPhone
|
8
mcfog 2017-07-16 08:43:34 +08:00 1
敢在代码里依赖这种特性也是大心脏
老老实实地 return is_int($time) ? $time : strtotime($time); 不就好了,不如说如果你的某个变量可能一会儿是时间戳一会儿是时间字符串,那八成是整体的设计有问题吧 |
9
vibbow 2017-07-16 10:46:04 +08:00
|
10
iyaozhen 2017-07-16 11:45:49 +08:00 via Android
str to time 这不是很好理解嘛。各种字符串形式的时间自动转成时间戳。几乎只要是正常的时间表示都没问题。楼主明显是用错了。
|
11
wdlth 2017-07-16 12:54:53 +08:00
我都用 DateTime 和 Carbon
|
12
v1024 2017-07-16 14:21:22 +08:00 via iPhone
所以要先去查源码
|
13
sagaxu 2017-07-16 15:30:08 +08:00 1
终于知道 php 为何被黑的这么惨了
|
14
dream7758522 2017-07-16 18:32:46 +08:00 via Android
php 是世界上最好的语言
|
15
FrankFang128 2017-07-16 18:56:47 +08:00
高级黑
|
16
yaozeyuan93 OP |