原码笔记

原码笔记

javascript+php实现根据用户时区显示当地时间的方法

小诸哥 0

本文实例讲述了javascript+php实现根据用户时区显示当地时间的方法。分享给大家供大家参考。具体如下:

在跨时区应用中会用到下面代码,这是以前写的一段代码。

服务器保存相关时间配置,保存形式为GMT时间,客户端需要根据客户所在时区做相应显示,以符合客户习惯。

1. javaScript代码如下:

  1. window.onload = function() {
  2. //TODO begin 处理登陆用户时区
  3.      //获得登陆用户时区与GMT时区的差值
  4.      var exp = new Date();
  5.      var gmtHours = -(exp.getTimezoneOffset()/60);
  6.      setCookie('customer_timezone',gmtHours,1);
  7.      //判断是否为夏令时
  8.      date = exp.format('yyyy-MM-dd HH:mm:ss');
  9.      if(inDaylightTime(date)){
  10.          setCookie('inDaylightTime',1,1);
  11.      }
  12. }
  13. //设置Cookie
  14. function setCookie(c_name,value,expiredays){
  15.      var exdate=new Date()
  16.      exdate.setDate(exdate.getDate()+expiredays)
  17.      document.cookie=c_name+ "=" +escape(value)+
  18.      ((expiredays==null) ? "" : "; expires="+exdate.toGMTString())
  19. }
  20. //判断时间是东半球还是西半球
  21. function isEastEarthTime(newDate)
  22. {
  23.      var dj= newDate.getGMTOffset(false);
  24.      if (dj.indexOf("-") == -1){
  25.      return true;
  26.      } else {
  27.      return false;
  28.      }
  29. }
  30. //是否是夏令时
  31. function inDaylightTime(date){
  32.      var start = new Date(date.getTime());
  33.      start.setMonth(0);
  34.      start.setDate(1);
  35.      start.setHours(0);
  36.      start.setMinutes(0);
  37.      start.setSeconds(0);
  38.      var middle = new Date(start.getTime());
  39.      middle.setMonth(6);
  40.      // 如果年始和年中时差相同,则认为此国家没有夏令时
  41.      if ((middle.getTimezoneOffset() - start.getTimezoneOffset()) == 0)
  42.      {
  43.      return false;
  44.      }
  45.      var margin = 0;
  46.      if (this.isEastEarthTime(date)) {
  47.      margin = middle.getTimezoneOffset();
  48.      } else {
  49.      margin = start.getTimezoneOffset();
  50.      }
  51.      if (date.getTimezoneOffset() == margin) {
  52.      return true;
  53.      }
  54.      return false;
  55. }
  56. //DONE end

2. 服务器端php代码:

  1. //24小时内 GMT到本地时间的转换
  2. function gmt_to_local($time = '', $dst = FALSE){
  3.      //JavaScript设置Cookie,PHP取值
  4.      if (isset($_COOKIE["customer_timezone"])){
  5.      $timezone = $_COOKIE["customer_timezone"];
  6.      }else{
  7.      $timezone = 0;
  8.      }
  9.      if ($time == ''){
  10.      return now();
  11.      }
  12.      //时间处理
  13.      $time += $timezone * 3600;
  14.     
  15.      //是否为夏令时
  16.      if(isset($_COOKIE["inDaylightTime"]) && $_COOKIE["inDaylightTime"]==1)
  17.      {
  18.      $dst = TRUE;
  19.      }
  20.      if ($dst == TRUE){
  21.      $time += 3600;
  22.      }
  23.      return date("H:i",$time);
  24. }

希望本文所述对大家的php程序设计有所帮助。

标签: javascript 时区显示 当地时间