PHP应用跨时区功能的实现方法

 更新时间:2019年03月21日 16:08:00   作者:CODETC  
今天小编就为大家分享一篇关于PHP应用跨时区功能的实现方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

PHP中要实现一个跨时区的应用,也就是不同时区登录的用户需要看到自己时区的时间,同时也要能够进行时区的切换。

这里的思路是,系统中所有存储的时间都是GMT(UTC)时间,用户登录时,根据用户所在的时区进行对应的显示。

关于PHP中时间函数的使用就参考:PHP时间函数使用详解。这里我们先了解一下PHP中时区的设置方法。PHP中进行设置的方法比较灵活多样,可以在php.ini中设置date.timezone属性、可以通过代码,调用ini_set(‘date.timezone', ‘')设置,也可以使用函数 date_default_timezone_set(),或者在htaccess文件中设置。

服务器的默认时区,如果设置的和我们希望的时区不符,而且我们也没有权限修改全局的时区配置,就只有借助于代码了。

PHP还提供了一个方便的函数,gmdate(),可以让我们不用关心服务器的时区设置而始终获得GMT时间,我的思路就是基于这个函数。

我的项目中使用了Codeigniter这个框架,框架中的date这个helper提供了几个方便的函数,可以用来处理应用中的多时区情况。

其中 now() 始终返回的是gmt的当前时间;local_to_gmt() 可以将本地的时间转换为gmt时间;gmt_to_local() 可以将gmt时间转换为本地时间;

考虑一个典型的应用场景:

用户登陆后,要显示当前时间。这是我们可以使用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实现多线程编程

    如何用PHP实现多线程编程

    原以为 PHP 普遍都是单线程模型,并不适合多线程领域,发现PHP的多线程也颇有可取之处,用来解决某些问题竟然非常适合。本文对比多进程介绍了下多线程的优势和适用场景,提出了一种巧用方案,并使用PHP代码实现了多线程的常见用法。
    2021-05-05
  • PHP的Yii框架中移除组件所绑定的行为的方法

    PHP的Yii框架中移除组件所绑定的行为的方法

    这篇文章主要介绍了PHP的Yii框架中移除组件所绑定的行为的方法,可以用detachBehavio方法或者移除全部行为,需要的朋友可以参考下
    2016-03-03
  • PHP 登录记住密码实现思路

    PHP 登录记住密码实现思路

    在登录的时候记住用户输入的密码在某些情况下是很有必要的,下面是一个小例子,感兴趣的朋友可以参考下哈,希望对你有所帮助
    2013-05-05
  • php mysql获取表字段名称和字段信息的三种方法

    php mysql获取表字段名称和字段信息的三种方法

    本文章向大家介绍php获取mysql表字段名称和字段信息的三种方法,分别为:mysql_fetch_field方法、desc方法和SHOW FULL FIELDS方法,
    2016-11-11
  • PHP常见错误提示含义解释(实用!值得收藏)

    PHP常见错误提示含义解释(实用!值得收藏)

    这篇文章主要介绍了PHP常见错误提示含义解释,包含了各种常见的PHP错误提示及具体含义,便于查询参考,需要的朋友可以参考下
    2016-04-04
  • php删除页面记录 同时刷新页面 删除条件用GET方式获得

    php删除页面记录 同时刷新页面 删除条件用GET方式获得

    在某个页面上显示查询数据,并在每条数据后增加删除功能,点击“删除”,删除掉数据,同时刷新页面
    2012-01-01
  • PHP如何利用P3P实现跨域

    PHP如何利用P3P实现跨域

    在开发中,我们碰到的跨域主要还是纠结在IE,页面中的IFRAME或者FRAME或者JS跨域的时候,IE有安全策略限制页面不带cookie,但是如果我们加上P3P,就没有这策略的限制。这也是P3P来突破跨域的可行前提
    2013-08-08
  • php跨站攻击实例分析

    php跨站攻击实例分析

    这篇文章主要介绍了php跨站攻击的原理与防范技巧,以具体实例对php跨站攻击进行了较为详细的分析,是非常实用的技巧,需要的朋友可以参考下
    2014-10-10
  • PHP之变量、常量学习笔记

    PHP之变量、常量学习笔记

    亲密接触PHP之变量、常量学习笔记(阅读笔记自PHP手册) PHP 中一个美元符号($)后面跟上一个变量名称,即表示一个变量。变量的名称是对大小写敏感的。其中变量名允许数字或下划线打头。
    2008-03-03

最新评论