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

4

我正在用PHP编写Twitter网络服务。当用户登录时,我会收到以下节点:

<utc_offset>-18000</utc_offset>

我需要更改脚本的时区以适应用户的真实时区。我找到的唯一一个PHP函数是:date_default_timezone_set($timezone_identifier),但它不允许我将-18000用作$timezone_identifier参数。
那么,如何根据两个值:服务器UTC偏移和用户UTC偏移来更改当前用户时区?
顺便说一下,这就是我获取服务器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);

有什么想法吗?谢谢!

-18000 是时区的偏移量而非标识符。要获取有效的时区标识符,请访问此链接:http://php.net/manual/en/timezones.php。 - Wh1T3h4Ck5
我将使用您的 $usertime 而非 time() 来计算日期 :) - Andres SK
2个回答

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(厄瓜多尔 -> 基多时间无夏令时),PHP时区标识符'America/Guayaquil'

2011-04-12 13:39:43

PHP.net手册:

时区偏移量(单位:秒)。UTC以西的时区偏移总是负数,而UTC以东的时区偏移总是正数。 (-43200到50400)


谢谢你提供的代码,非常好用!找出我的时区的细节很棒呢。 - Andres SK

1

date_default_timezone... 函数期望一个字符串,例如 "Africa/Luanda" 或其他类似的内容。

我建议通过编程方式搜索时区数据库以查找匹配的偏移量。如果我没记错的话,这些偏移量是相对于 UTC 的分钟数,因此您应该将所给出的偏移量除以 60。


偏移量以秒为单位给出... 如果你将18000除以60,就是300个小时的差距... UTC-300是不可能的 :) - Wh1T3h4Ck5
18000将是300分钟或5小时。 - wallyk
是的,所以你应该将偏移量除以3600以获取UTC差异(以小时为单位),即UTC-5,对吗? - Wh1T3h4Ck5

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