如何在PHP中将MySQL存储的长格式时间戳转换为标准日期时间
错误原因
你拿到的20211024090000不是Unix时间戳,是按年月日时分秒顺序拼接的数字格式时间,符合YYYYMMDDHHIISS的拼接规则。
PHP的date()函数第二个参数要求传入Unix时间戳(1970-01-01 00:00:00 UTC到目标时间的秒数),你传入的数值远大于当前正常的Unix时间戳范围,所以解析出来的时间会跳转到几十万年后。
解决方法
PHP端转换
直接用DateTime类的格式解析方法处理即可,示例代码:
$rawTime = '20211024090000'; $dateObj = DateTime::createFromFormat('YmdHis', $rawTime); echo $dateObj->format('m/d/Y H:i:s'); // 输出结果为 10/24/2021 09:00:00
MySQL端直接转换
如果是查询数据时需要直接格式化,可以用MySQL内置的STR_TO_DATE函数处理,示例查询语句:
-- 直接转成日期时间格式 SELECT STR_TO_DATE(你的时间字段名, '%Y%m%d%H%i%s') AS format_time FROM 你的表名; -- 如果需要转成Unix时间戳给PHP后续处理,可以嵌套UNIX_TIMESTAMP函数 SELECT UNIX_TIMESTAMP(STR_TO_DATE(你的时间字段名, '%Y%m%d%H%i%s')) AS unix_time FROM 你的表名;
内容的提问来源于stack exchange,提问作者lwd
相关产品推荐
相关产品推荐

