php 通过date('ymdHis')得到的字符串,为什么转换得到的整数不是本身数值?

        $str_orig=date('ymdHis');  
        var_dump($str_orig);  //string '220504105419' (length=12),这个没问题
        var_dump((int)$str_orig);  //int 2147483647 这个为什么不是220504105419
        var_dump(intval($str_orig));  //int 2147483647 这个为什么不是220504105419
        var_dump((float)$str_orig);  //float 220504105419 为什么转换为float才是220504105419

date('ymdHis')得到的字符串 '220504105419',转换整数之后为什么不是220504105419??
只有转换为float才能得到本身的数值。

这个奇怪的数字2147483647 是怎么得来的?
明显也不是对应的时间戳

阅读 4k
2 个回答

因为 2147483647 是 int 类型的最大值,说明你的操作系统是 32 位的。
原来的整数超出了 int 的最大值,所以赋值成了这个最大值。

https://www.php.net/manual/zh...

成功时返回 value 的 integer 值,失败时返回 0。 空的 array 返回 0,非空的 array 返回 1。

最大的值取决于操作系统。 32 位系统最大带符号的 integer 范围是 -2147483648 到 2147483647。举例,在这样的系统上,intval('1000000000000') 会返回 2147483647。64 位系统上,最大带符号的 integer 值是 9223372036854775807。

字符串有可能返回 0,虽然取决于字符串最左侧的字符。 使用 整型转换 的共同规则。

为什么得到的是字符串?因为这个函数签名就是这样设计的

date(string $format, ?int $timestamp = null): string

为什么是'220504105419'?因为当前的时间戳按照你给的格式'ymdHis'格式化后,y代表着22年份,m代表着05月份,d代表04日期,H代表10小时,i代表54分钟,s代表19秒。
参考:
https://www.php.net/manual/en...
https://www.php.net/manual/en...

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题