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

PHP将Mongo数据库UTC毫秒时间戳转换为PST时区日期

解决PHP将Mongo毫秒时间戳转换为PST日期的问题

你的核心问题是传入的是毫秒级时间戳,但PHP的日期处理函数默认只认秒级时间戳,直接使用会导致日期计算错误。以下是两种正确的实现方式:

方法一:使用date()函数

先将毫秒时间戳转为秒,再设置目标时区(推荐使用America/Los_Angeles,它会自动处理夏令时,比固定的PST更准确):

// 毫秒转秒
$timestamp = 1659052800000 / 1000;
// 设置时区
date_default_timezone_set('America/Los_Angeles');
$this->vars['dateOfEvent'] = date('Y-m-d', $timestamp);

方法二:使用DateTime类(更推荐)

通过DateTime和DateTimeZone可以更灵活地处理时区转换,避免全局时区设置的影响:

// 毫秒转秒
$timestamp = 1659052800000 / 1000;
// 先创建UTC时间对象,再转换到PST时区
$dt = new DateTime("@$timestamp", new DateTimeZone('UTC'));
$dt->setTimezone(new DateTimeZone('America/Los_Angeles'));
$this->vars['dateOfEvent'] = $dt->format('Y-m-d');

为什么之前的代码失效?

你直接传入1659052800000作为时间戳时,PHP会将其视为秒数,对应的日期是远未来的年份,自然和你期望的2022-07-28不符。必须先除以1000转换为秒级时间戳,才能得到正确的UTC时间,再转换到PST时区。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 16:09:27