前端封装cookie与少8小时的问题。

我们在设置过期时间时候,会发现总是比自己的预期少8个小时,发现cookie的过期时间后跟着一个大大的“Z”,也就是说浏览器端设置时间是按照GMT时间是格林尼治标准时间来设置的。这是因为GMT格林威治时间与北京时间的不同,北京时间=GMT时间+8小时。所以在我们设置的基础上,要再增加8个小时才能达到预期

/*
            expireHours:  1H   30M   60S   代表 一小时  30分  60 秒。
            设置过期时间要注意在设置的基础上加8小时,
            因为GMT格林威治时间与北京时间的转换规则 :北京时间=GMT时间+8小时。
            
        */
         
        function addCookie(name,value,expireHours) {
                // TODO 添加函数过程
                var cookieStr=name+"="+escape(value);
                //是否设置过期时间
                if(expireHours>0){
                    var date =new Date();
                    date.setTime(date.getTime()+expireHours*3600*1000);
                    cookieStr=cookieStr+";expires="+date.toGMTString();
                }else if(/^\d+H$/.test(expireHours)){
                    var hour=expireHours.slice(0,-1);
                    var date =new Date();
                    date.setTime(date.getTime()+parseInt(hour)*3600*1000);
                    cookieStr=cookieStr+";expires="+date.toGMTString();
                }else if(/^\d+M$/.test(expireHours)){
                    var minutes=expireHours.slice(0,-1);
                    var date =new Date();
                    date.setTime(date.getTime()+parseInt(minutes)*60*1000);
                    cookieStr=cookieStr+";expires="+date.toGMTString();
                }else if(/^\d+S$/.test(expireHours)){
                    var seconds=expireHours.slice(0,-1);
                    var date =new Date();
                    date.setTime(date.getTime()+parseInt(seconds)*1000);
                    cookieStr=cookieStr+";expires="+date.toGMTString();
                }
                
                document.cookie = cookieStr;
                // sessionStorage.setItem(name,JSON.stringify(value))
                // console.log(sessionStorage.getItem(name))
                console.log(cookieStr)
            }
        function getCookie(name){
                
                var arr = document.cookie.match(new RegExp("(^| )"+name+"=([^;]*)(;|$)"));
                if(arr != null) 
                    return unescape(arr[2]); 
                return null;
                
            }
        function deleteCookie(name){
                var exp=new Date();
                exp.setTime(exp.getTime()-10000);
                var cval=this.getCookie(name);
                if(cval!=null){
                    document.cookie=name+"="+cval+";expires="+exp.toGMTString();
                }                                           
            }

解决方案:
因为一般cookie只会设置时分,秒一般不去管

时:  date.setTime(date.getTime()+parseInt(hour)*3600*1000*9); 
分:date.setTime(date.getTime()+parseInt(minutes)*60*1000*54);
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容