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

如何在PHP中将指定格式时间戳转换为Unix纪元秒数

PHP 忽略时区转换ISO时间为Unix时间戳

需求说明

你需要将2023-05-10T22:32:21+02:00这类带时区的ISO时间字符串,忽略时区部分后转换为基于GMT的Unix时间戳(自1970-01-01 00:00:00 GMT以来的秒数)。


方法一:字符串拆分实现(符合你最初的思路)

直接拆分字符串去掉时区,再转换为标准时间格式后解析:

$originalTime = '2023-05-10T22:32:21+02:00';

// 拆分时区部分,保留核心日期时间字符串
$timeWithoutTz = explode('+', $originalTime)[0];
// 将ISO格式的T替换为空格,转为PHP易解析的格式
$formattedTime = str_replace('T', ' ', $timeWithoutTz);

// 明确指定按GMT时区解析,避免服务器本地时区干扰
date_default_timezone_set('GMT');
$timestamp = strtotime($formattedTime);
// 可选:还原服务器原本的时区设置
date_default_timezone_set(date_default_timezone_get());

echo $timestamp; // 输出:1683757941

方法二:DateTime类实现(更健壮推荐)

使用PHP内置的DateTime类处理,兼容性更好,尤其适合复杂时间格式:

$originalTime = '2023-05-10T22:32:21+02:00';

// 用正则去掉末尾的时区部分(兼容+/-开头的时区格式)
$timeWithoutTz = preg_replace('/[+-]\d{2}:\d{2}$/', '', $originalTime);

// 创建指定GMT时区的DateTime对象,确保解析为GMT时间
$date = DateTime::createFromFormat(
    'Y-m-d\TH:i:s',
    $timeWithoutTz,
    new DateTimeZone('GMT')
);

// 获取Unix时间戳(秒数)
$timestamp = $date->getTimestamp();

echo $timestamp; // 输出:1683757941

关键注意点

  • 不要直接使用strtotime($originalTime),因为该方法会自动识别并应用字符串中的+02:00时区,导致转换出的时间戳是该时区对应的GMT时间,不符合你忽略时区的需求。
  • 必须指定GMT时区解析,才能保证输出的是基于Unix纪元GMT标准的秒数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 14:45:22