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

PHP如何将日期转换为带毫秒和冒号时区偏移的ISO 8601格式

问题解答

格式识别

你提到的2021-10-04T09:49:50.636-04:00属于带毫秒精度、时区带冒号分隔的ISO 8601扩展格式,也符合RFC3339扩展规范。
PHP内置的DateTime::ISO8601常量对应的格式存在两个和目标格式不一致的点:

  • 时区偏移没有冒号分隔(比如输出的是-0300而非-03:00)
  • 不包含毫秒部分

转换方法

通用兼容方案(PHP 7.0+)

直接使用自定义格式串输出即可,不需要先调用date()再转DateTime对象,直接实例化就能拿到完整的时间精度:

// 创建当前时间的DateTime对象,自动包含微秒精度
$date = new DateTime();
// 格式说明:v为3位毫秒,P为带冒号的时区偏移
echo $date->format('Y-m-d\TH:i:s.vP');

如果必须从date()生成的时间字符串转换,注意date()默认返回的时间不带毫秒,且你原来的代码用了12小时制的h,需要换成24小时制的H避免时间错误:

// 使用H表示24小时制
$today = date('Y-m-d H:i:s');
$format = new DateTime($today);
echo $format->format('Y-m-d\TH:i:s.vP');
// 输出的毫秒部分会固定为000,因为date()返回的字符串无毫秒信息

PHP 8.0+简化方案

PHP 8.0及以上版本新增了DateTime::RFC3339_EXTENDED常量,刚好匹配你需要的目标格式,可以直接调用:

$date = new DateTime();
echo $date->format(DateTime::RFC3339_EXTENDED);

内容的提问来源于stack exchange,提问作者Giulia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 19:06:03