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

  • 相关阅读:
    HDU 2095 find your present (2) (异或)
    UESTC 486 Good Morning (水题+坑!)
    UVa 111 History Grading (简单DP,LIS或LCS)
    UVa 11292 Dragon of Loowater (水题,排序)
    HDU 1503 Advanced Fruits (LCS+DP+递归)
    UVa 10881 Piotr's Ants (等价变换)
    UVa 11178 Morley's Theorem (几何问题)
    HDU 1285 确定比赛名次(拓扑排序)
    .net Core的例子
    TCP与UDP的区别
  • 原文地址:https://www.cnblogs.com/twodog/p/12140296.html
Copyright © 2011-2022 走看看