获取给定位置的时区偏移量

8

在PHP中,是否可以获取给定位置的时区偏移量?例如,当给定位置为“悉尼/澳大利亚”时,获取时区偏移量为“+1100”。如果此函数考虑夏令时(即它知道夏令时并根据情况调整偏移量),则会有额外奖励。


你是否正在尝试在给定的时区显示日期/时间? - David Snabel-Caunt
@david。我正在存储UTC时间戳,希望能够将其转换为任何本地时间。 - Luke
@pekka。官方时区名称已经足够好了。 - Luke
@Luke 我也这么想 - 那么你就不需要计算偏移量并手动进行算术操作了。请参见我下面的回答。 - David Snabel-Caunt
谢谢大家。对于一些混淆感到抱歉。当我在问题中要求'+1100'时,我并不是字面上的意思。只需要一个整数11就可以了。 :) - Luke
显示剩余2条评论
3个回答

20
您可以使用DateTimeZone类。
<?php
$timezone = new DateTimeZone("Australia/Sydney");
$offset = $timezone->getOffset(new DateTime("now")); // Offset in seconds
echo ($offset < 0 ? '-' : '+').round($offset/3600).'00'; // prints "+1100"
?>

7
为了显示本地日期/时间,您可以使用以下代码,其中“Europe/Berlin”将替换为用户的时区。
$date = new DateTime($value);
$date->setTimezone(new DateTimeZone('Europe/Berlin'));
echo $date->format('Y-m-d H:i:s');

4

不确定为什么需要“+1100”(而不是十进制表示),但您可以使用以下内容:

$dt = new DateTime(null, new DateTimeZone('Australia/Sydney'));
$offset = $dt->getOffset()/60/60; // 11

$hours = intval($offset);
$minutes = str_pad((string)($offset - $hours) * 60, 2, '0', STR_PAD_RIGHT);
echo $hours.$minutes; // 1100

null替换为'2010-10-01',您将获得1000


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