2011-04-12 104 views
4

即时通讯在php中编写twitter web服务。当用户登录时,我收到此节点:基于服务器UTC偏移和用户UTC偏移更改当前用户时区

<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); 

任何想法?谢谢!

+0

-18000被偏移而不是时区的标识符。对于有效的时区标识符[请访问此链接](http://php.net/manual/en/timezones.php)。 – Wh1T3h4Ck5 2011-04-12 18:20:21

+0

我会用你的$ usertime而不是时间()来计算日期:) – andufo 2011-04-12 20:47:18

回答

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要获得用户的时间(Ecuado r - >基多时间NO DST),php时区标识'America/Guayaquil'

2011-04-12 13:39:43 

PHP.net手册:

时区以秒的偏移。 UTC以西时区的偏移量 始终为 负数,对于UTC以东的那些地区始终为 总是正数。 (-43200至 50400)

+0

感谢您的代码,非常棒!找出我的时区在哪里的好的细节。 – andufo 2011-04-12 19:00:20

+0

@andufo - 不客气。 – Wh1T3h4Ck5 2011-04-12 19:00:57

1

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

我建议通过编程的方式在时区数据库中搜索匹配偏移量。如果我没有记错,这些都是从UTC分钟,所以你应该将这个偏移你是60

+0

偏移量以秒为单位......如果你将18000除以60它是300小时的差值......只是不可能UTC-300 :) – Wh1T3h4Ck5 2011-04-12 18:27:30

+0

18000将是300分钟或5个小时。 – wallyk 2011-04-12 18:33:02

+0

是的,所以你应该将偏移量除以3600来获得UTC时差UTC-5,对吧? – Wh1T3h4Ck5 2011-04-12 18:42:55

相关问题