zoukankan      html  css  js  c++  java
  • javascript+php实现根据用户时区显示当地时间的方法

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

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

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

    1. JavaScript代码如下:

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

    2. 服务器端php代码:

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

    转载于:https://www.cnblogs.com/linkxu1989/p/7025700.html

  • 相关阅读:
    知识图谱学习与实践(4)——通过例句介绍Sparql的使用
    知识图谱学习与实践(3)——知识表示
    知识图谱学习与实践(2)——知识图谱数据模型的构建
    知识图谱学习与实践(1)——知识图谱的演化过程
    NIO客户端主要创建过程
    NIO服务端主要创建过程
    Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7Bhive.session.id%7D_resources
    ubuntu中mysql安装失败
    使用ant build build.xml报“includeantruntime was not set”警告及"Class not found: javac1.8"问题
    maven编译报错 -source 1.5 中不支持 lambda(或diamond) 表达式,编码 UTF-8 的不可映射字符
  • 原文地址:https://www.cnblogs.com/twodog/p/12140295.html
Copyright © 2011-2022 走看看