如何获取多伦多时区下‘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
相关产品推荐
相关产品推荐

