Chinaunix首页 | 论坛 | 博客
  • 博客访问: 363097
  • 博文数量: 284
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1707
  • 用 户 组: 普通用户
  • 注册时间: 2014-05-14 16:38
文章分类

全部博文(284)

文章存档

2015年(6)

2014年(278)

我的朋友

分类: JavaScript

2014-07-24 15:52:17

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

服务器保存相关时间配置,保存形式为GMT时间,客户端需要根据客户所在时区做相应显示,以符合客户习惯。 
1. [代码][JavaScript]代码  
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
 
服务器端php代码
//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);
}
阅读(654) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~