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);
    }
  • 相关阅读:
    由jQuery Validation Remote验证引起的错误(MVC3 jQuery.validate.unobtrusive)
    Windows8下设置VS默认启动方式为管理员启动
    Asp.Net MVC 必备插件MVC Route Visualizer(Visual Studio 2012 版)
    2012 LinkCoder Jeffrey Richter:Win 8应用开发与.NET4.5
    WCF应用:宿主与调用纯代码示例(Host &Client code only sample)
    Nexus 7 入手风波记
    [转]使用HyperV BPA(Best Practices Analyzer最佳化分析工具)
    [转]SCVMM2012部署之一:先决条件条件准备
    [转]VMware管理员必掌握的八个HyperV功能
    [转]Installing and Configuring target iSCSI server on Windows Server 2012
  • 原文地址:https://www.cnblogs.com/linkxu1989/p/7025700.html
Copyright © 2011-2022 走看看