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

如何获取多伦多时区下‘March 26, 2012’的PHP时间戳?

解决多伦多时区日期转时间戳的问题

嘿,别担心,你的思路其实是对的,而且'March 26, 2012'完全可以被PHP的DateTime类识别!我来给你理清楚怎么正确拿到多伦多时区下这个日期对应的时间戳。

首先咱们得明确:Unix时间戳本身是UTC时区下从1970-01-01 00:00:00开始的秒数,所以我们要的其实是「多伦多时区的2012年3月26日00:00:00」这个时间点对应的UTC时间戳。

方法一:用DateTime类(推荐)

你之前尝试的代码方向是对的,只是可能误以为日期格式不被识别,其实没问题。直接指定时区创建DateTime对象,然后获取时间戳即可:

// 创建多伦多时区下的日期对象
$date = new DateTime('March 26, 2012', new DateTimeZone('America/Toronto'));
// 获取对应的Unix时间戳,两种方法等价
$timestamp = $date->format('U');
// 或者使用getTimestamp()方法
$timestamp = $date->getTimestamp();

这个方法的好处是直接明确指定了时区,不会受PHP默认时区的影响,代码可读性也更高。

方法二:设置默认时区后用strtotime

如果你习惯用strtotime,可以先把PHP的默认时区设置为多伦多,再调用strtotime,这样它就会把日期字符串解析为多伦多时区的时间:

// 设置默认时区为多伦多
date_default_timezone_set('America/Toronto');
// 此时strtotime会解析为多伦多时区的日期
$timestamp = strtotime('March 26, 2012');

不过这种方法要注意,如果你的项目其他地方依赖默认时区,可能会有冲突,所以还是更推荐DateTime类的方式。

验证结果

如果你想确认时间戳是否正确,可以把它转回到UTC时间看看:

$utcDate = new DateTime('@' . $timestamp);
$utcDate->setTimezone(new DateTimeZone('UTC'));
echo $utcDate->format('Y-m-d H:i:s');

2012年3月多伦多处于夏令时(UTC-4),所以输出应该是2012-03-26 04:00:00,这就说明我们拿到的是多伦多时区当天0点对应的UTC时间戳,完全正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:44:47