如何在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
相关产品推荐
相关产品推荐

