将PHP时区名称转换为偏移量

28

如何将时区名称(“Asia/Dubai”,“Europe/Andorra”等)转换为以小时为单位的GMT偏移量(甚至是秒,因为我可以从那里进行转换)。

大多数人要求反向操作,但我需要从GeoNames提供的时区名称获取时区偏移量。


这不是直接回答你的问题,但可能解决你的问题。看起来你可以直接查询GeoNames获取偏移量,像这样:http://api.geonames.org/timezoneJSON?lat=47.01&lng=10.2 - Ben Lee
是的,我实际上正在使用GeoNames作为主要数据源。主要问题是它们目前负载过重,因此我正在尝试备用方案以应对这种情况。 - Andrew M
可能是PHP中的UTC偏移的重复问题。 - HMagdy
3个回答

52

你可以使用以下方法

<?php

$timezone = 'Pacific/Nauru';
$time = new \DateTime('now', new DateTimeZone($timezone));
$timezoneOffset = $time->format('P');
?>

2
请查看 http://www.php.net/manual/zh/function.date.php 以输出秒数。 - Cecil Zorg
将“new dateTime”更改为“new DateTime”,并将“time()”更改为“'now'”后,功能完美。谢谢! - Andrew M
1
或者只需执行 $time->getOffset() 以输出整数秒。 - SenTisso

27

另一个选择是使用现有的DateTimeZone::getOffset()方法,它返回指定日期/时间时区偏移量,单位为秒。

$timezone = new DateTimeZone("Europe/Andorra");
$offset   = $timezone->getOffset(new DateTime);

2
我更喜欢这个答案,因为它给出了秒数。与返回hh:mm格式的format('P')相反。 - hpaknia

15

我喜欢使用PHP Carbon


$offset = Carbon::now('Europe/Andorra')->offsetHours;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接