从php中的时区计算时间

时间:2010-03-16 06:19:46

标签: php mysql datetime

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

4 个答案:

答案 0 :(得分:1)

假设您的服务器位于美国,并使用当地美国GMT -7将日期存储在数据库中。

所以你发送本地偏移-7和雇员国家的偏移量,让我们说在欧洲的某个地方+2。

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

这将计算偏移量:

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

计算偏移量后,您只需要从数据库中获取日期并向其添加偏移量。

就像那样:

$intUnixTimeStamp += $intGmtOffest*60*60;

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

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

答案 1 :(得分:0)

查看PHP的时区设置功能,包括date_timezone_set

答案 2 :(得分:0)

除了Dav的回答,我建议将所有时间数据存储在“timestamp”mysql数据类型中,因为它会自动处理时区

答案 3 :(得分:0)

让我们说:

贵公司当地时间是美国gmt(-6)的一部分,我们在荷兰有一名员工,gmt(+2)。

所以你想要做的是:

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

  2. 现在,当您在数据库中查询可用日期时,请首先检查员工国家/地区以获取其偏移量。

    • 如果荷兰员工的数字是+2,那么您知道数据库中的所有日期都存储为本地公司时间gmt -8。 所以它实际上是距gmt = -8的-6 - + 2偏移量 现在,如果我们想从服务器时间转到荷兰的员工,我们只需将8小时的偏移量添加到时间。
  3. 最好是将它应用于sql查询,应该是:

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

    所以这实际上会增加导致主查询8小时偏移的任何日期。