PHP中如何将Unix时间戳转换为UTC日期时间?(非面向对象实现)
从Unix时间戳转UTC日期(非面向对象PHP实现)
已知UTC日期2022-12-11对应的起始Unix时间戳为1670716800,可通过以下代码实现UTC日期到时间戳的转换:
$Date = "2022-12-11"; echo strtotime($Date . " 00:00 UTC");
输出结果为1670716800,符合预期。
若需要反向转换——将Unix时间戳转为UTC时区的日期时间,而getdate(1670716800)返回的是本地时区结果,且要求尽可能避免使用面向对象PHP实现,可采用以下几种方法:
方法1:使用gmdate()(最推荐)
gmdate()函数原生基于UTC时区处理日期格式化,无需额外配置,直接调用即可:
$timestamp = 1670716800; // 输出UTC日期:2022-12-11 echo gmdate('Y-m-d', $timestamp); // 若需完整UTC时间(含时分秒) echo gmdate('Y-m-d H:i:s', $timestamp);
方法2:临时切换时区后使用date()
如果习惯使用date()函数,可临时将PHP默认时区设为UTC,转换完成后再还原原时区:
$timestamp = 1670716800; // 保存当前时区 $originalTimezone = date_default_timezone_get(); // 切换到UTC时区 date_default_timezone_set('UTC'); // 输出UTC日期:2022-12-11 echo date('Y-m-d', $timestamp); // 还原原时区,避免影响后续代码 date_default_timezone_set($originalTimezone);
若需使用getdate()的处理方式
getdate()默认依赖本地时区,若必须使用该函数,可通过临时切换时区实现:
$timestamp = 1670716800; $originalTimezone = date_default_timezone_get(); date_default_timezone_set('UTC'); $utcDateInfo = getdate($timestamp); date_default_timezone_set($originalTimezone); // 格式化输出UTC日期:2022-12-11 echo sprintf('%d-%02d-%02d', $utcDateInfo['year'], $utcDateInfo['mon'], $utcDateInfo['mday']);
此方法相对繁琐,优先推荐gmdate()方案。
内容的提问来源于stack exchange,提问作者Kolodez
相关产品推荐
相关产品推荐

