2010-03-16 135 views
0

Hai从php的时区计算时间

我的系统中员工在他们的个人资料中有不同的时区。我想根据他们指定的时区显示日期。 GMT时区值被放置在数据库中。 你能帮我吗

+0

“GMT时区值被放置在数据库中” - 以什么格式/字段类型? – VolkerK 2010-03-16 09:20:57

回答

0

除了DAV的回答我提出的所有时间数据存储在“时间戳” MySQL的数据类型,因为它会自动处理时区

1

比方说,您的服务器位于美国和存储日期与美国当地GMT数据库-7。

因此,您发送本地偏移量-7和员工国家的偏移量,可以说在欧洲的某个地方+2。

所以基本上你只需要知道什么是-7 -2和它的9小时偏移量,所以你存储在数据库中的每个日期必须添加9个小时来表示在欧洲的时间。

这将计算偏移:

fnGetOffset($source_gmt_offset ,$fltGmtOffset) 
{ 
    $intGmtOffest = $source_gmt_offset - $fltGmtOffset; 
    if($intGmtOffest <> 0) 
    { 
     return $intGmtOffest; 
    } 
} 

你算偏差之后,你只需要从DB获得的日期和添加到它的偏移量。

就像是:

$intUnixTimeStamp += $intGmtOffest*60*60;

所以这是用PHP做的正确方法。

如果您想根据用户选择的时间查询服务器,则需要返回-9。

+0

谢谢亚历克斯,请你给我一些例子日期锻炼 – Thinker 2010-03-17 05:34:01

+0

你非常欢迎,我发布了与MySQL代码示例的答复。 – alex 2010-03-23 09:56:30

0

让说:

贵公司的本地时间为格林威治时间美国(-6)的一些情况,以及我们必须在荷兰与GMT(+2)的雇员。

所以,你会想要做的是:

  1. 在你的数据库保存在公司当地时间事件日期。

  2. 现在,当您查询您的数据库的可用日期时,首先检查员工国家以获得他的抵消。

    • 如果它的荷兰员工的数字为+2,那么您知道数据库中的所有日期都存储为本地公司时间gmt -8。 所以它实际上是一个从gmt = -8的-6 - +2偏移量。现在,如果我们想从服务器时间到荷兰的员工,我们只需要将时间偏移8小时。

最好的事情是它适用于SQL查询应该是这样的:

$symb= "+"; 
$intGmtInterval= 8; 

DATE_FORMAT(CONVERT_TZ(my_event,'+0:00','$symb$intGmtInterval:00'),'%W') 

所以这实际上将增加任何日期,导致在你的主查询8个小时的偏差。