我们在设置过期时间时候,会发现总是比自己的预期少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);