PHP中使用gmdate格式化4位数字存储时间的问题咨询
PHP中使用gmdate格式化4位数字存储时间的问题咨询
嗨,我来帮你搞定这个时间格式化的问题~
你遇到的情况是:把时间以4位数字(比如1100代表上午11点)存储,想用gmdate()格式化输出11:00,但实际得到了09:00,对吧?
问题原因
你当前代码里的strtotime($time)会把1100解析成服务器本地时区的当天11点,而gmdate()输出的是格林威治标准时间(GMT)。如果你的服务器时区比GMT早2小时(比如GMT+2时区),那GMT时间就会比本地时间晚2小时,所以最终输出09:00而不是预期的11:00。另外,strtotime对纯数字时间的解析有时候会有歧义,不是最可靠的方式。
几种可行的解决方案
方案一:手动拆分字符串(最简单直接)
因为你的时间是固定4位格式,直接截取前两位作为小时,后两位作为分钟拼接即可:$time = '1100'; $formattedTime = substr($time, 0, 2) . ':' . substr($time, 2); echo $formattedTime; // 输出 11:00方案二:用DateTime类解析(更规范,适合后续扩展)
PHP的DateTime类有专门的createFromFormat方法,可以精准解析固定格式的时间,避免歧义:$time = '1100'; // 用"Hi"格式解析4位数字时间(H是24小时制小时,i是分钟) $dateObj = DateTime::createFromFormat('Hi', $time); echo $dateObj->format('H:i'); // 输出 11:00如果需要输出GMT时间,只需要设置时区即可:
$dateObj->setTimezone(new DateTimeZone('GMT')); echo $dateObj->format('H:i'); // 输出 11:00(GMT时间)方案三:修正原代码的时区问题
如果你坚持想用strtotime和gmdate,可以在解析时指定GMT时区,确保时间基准一致:$time = '1100'; echo gmdate('H:i', strtotime($time . ' GMT')); // 输出 11:00
备注:内容来源于stack exchange,提问作者bigdaveygeorge
相关产品推荐
相关产品推荐

