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

