加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP应用跨时区功能的实现技巧

发布时间:2022-06-13 15:44:25 所属栏目:PHP教程 来源:互联网
导读:PHP中要实现一个跨时区的应用,也就是不同时区登录的用户需要看到自己时区的时间,同时也要能够进行时区的切换。 这里的思路是,系统中所有存储的时间都是GMT(UTC)时间,用户登录时,根据用户所在的时区进行对应的显示。 服务器的默认时区,如果设置的和我
  PHP中要实现一个跨时区的应用,也就是不同时区登录的用户需要看到自己时区的时间,同时也要能够进行时区的切换。
 
  这里的思路是,系统中所有存储的时间都是GMT(UTC)时间,用户登录时,根据用户所在的时区进行对应的显示。
 
  服务器的默认时区,如果设置的和我们希望的时区不符,而且我们也没有权限修改全局的时区配置,就只有借助于代码了。
 
  考虑一个典型的应用场景:
 
  用户登陆后,要显示当前时间。这是我们可以使用now()获得标准的gmt时间,然后使用gmt_to_local()函数转化为用户所在时区的时间。
 
  用户要发布一个时间。用户发布了一个“2010-07-10 18:30:00”的时间,我们不能直接存入数据库,必须先利用local_to_gmt() 转化标准的gmt时间存入数据库,这样才能保证整个系统中的时间保持一致。
 
  这两个函数的细节,其实都是根据时区,然后进行相应的运算得来。计算的时候,也可以考虑夏令时,但是所在时区夏令时的开始和结束时间,则需要自己维护。
 
  codeigniter中提供了一份较为完整的时区列表,timezone_menu() 可以显示一个时区的下拉列表,但是这个列表中的时间不能完全对应到PHP自带的时区显示上,这是PHP本身的问题,不过可以通过下面这个函数,来让输入的每个时区,都可以获得一个对应的时区文字显示。
 
  if( ! function_exists("tz_offset_to_name") )  
  {  
    /* Takes a GMT offset (in hours) and returns a timezone name */
    function tz_offset_to_name($offset)  
    {  
        $offset *= 3600; // convert hour offset to seconds  
        $abbrarray = timezone_abbreviations_list();  
        foreach ($abbrarray as $abbr)  
        {  
            foreach ($abbr as $city)  
            {  
                if ($city['offset'] == $offset)  
                {  
                    return $city['timezone_id'];  
                }  
            }  
        }  
        return FALSE;  
    }  
  }

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读