You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 14:23:12