根据服务器UTC偏移量和用户UTC偏移量更改当前用户时区

时间:2011-04-12 18:14:12

标签: php timezone utc datetimeoffset

我正在用PHP写一个推特网络服务。当用户登录时,我会收到此节点:

<utc_offset>-18000</utc_offset>

我必须更改脚本的时区,以便它适应用户的实际时区。我找到的唯一一个php函数是: date_default_timezone_set($timezone_identifier) 但它不允许我使用-18000作为$ timezone_identifier参数。

那么,我如何根据两个值更改当前用户时区:服务器UTC偏移用户UTC偏移

BTW,这就是我获取服务器UTC偏移值的方式:

$this_tz_str = date_default_timezone_get();
$this_tz = new DateTimeZone($this_tz_str);
$now = new DateTime("now", $this_tz);
$offset = $this_tz->getOffset($now);

有什么想法吗?谢谢!

2 个答案:

答案 0 :(得分:2)

获取当前服务器时间

date_default_timezone_set(date_default_timezone_get());
echo date('Y-m-d H:i:s', time());

欧洲/巴黎的输出(我的服务器设置; UTC + 2)

2011-04-12 20:39:43

通过偏移获得用户的时间

$user_offset = '-18000';
date_default_timezone_set('UTC');
$diff = "$user_offset seconds";
if ((substr($diff,0,1) != '+') && (substr($diff,0,1) != '-')) $diff = '+' . $diff;
$usertime = strtotime($diff, time());
echo date('Y-m-d H:i:s', $usertime);

输出UTC-5(厄瓜多尔 - &gt;基多时间无DST),php时区标识符'America/Guayaquil'

2011-04-12 13:39:43

PHP.net手册:

  

以秒为单位的时区偏移量。偏移量   对于UTC以西的时区总是如此   否定,对于那些东部的UTC是   总是积极的。 (-43200到   50400)

答案 1 :(得分:1)

date_default_timezone...函数期望一个字符串给出类似“非洲/罗安达”的东西。

我建议以编程方式在时区数据库中搜索匹配的偏移量。如果我没记错的话,那些是从UTC开始的几分钟,所以你应该把你给出的偏移除以60。