JS Cookie当天24点过期,chrome时差问题
2016-09-25 11:21
381 查看
这个问题已经过去好些天了,当时为了上一个教师节的专题,里面有一个点赞的功能需要用到cookie存储记录。一开始自己写没注意,只知道运营说一天只能点赞一次,后来他们又说要当天24点之后就又可以在点赞,当然啦,这需求改的挺好的。检查的时候发现,尼玛之前写的cookie过期时间都到2025年去了,吓得一身冷汗。是我错了,把天当毫秒用了。
JS cookie 代码,直接声明一个对象就可以用了。
注意:这里的lifeCircle是按天算的。
后来调整到当天24点过期,这中间有两个问题可以注意一下。
一是谷歌的过期时间格式和其他浏览器不同,会出现北京时间(东八区)8个小时的时差,这不是尴尬了嘛。
二是火狐用firebug看过期时间表达方式我是真一下没反应过来,下午12:00,这还真就是晚上24:00。
好了,看我后来是怎么改好的。
主要思路是当日剩余时间就是生命周期,然后当前时间加上剩余时间转化为日期格式,中间会有一个问题是时间格式问题,国际标准时间,和中国标准(北京)时间是相差8小时的时差的,但是这个问题只有在谷歌上才会有,所以通过浏览器判断即可进行区分。
其实,在h5时代,我们可以换用其他的存储形式了。比如localstorage,sessionstorage等。不过我们的用户要兼容IE7,整天以泪洗面。
JS cookie 代码,直接声明一个对象就可以用了。
var cookie = { "setCookie": function (name, val, lifeCircle) { //name传入的键名 val传入的键值 lifeCircle cookie生命周期(过期时间=cookie的设置时间+lifeCircle) var oDate = new Date();//时间对象 oDate.setDate(new Date().getDate() + lifeCircle); document.cookie = name + "=" + val + ";expires=" + oDate + ";path=/"; }, "getCookie": function (name) { //name 为想要取到的键值的键名 var reg = /\s/g; var result = document.cookie.replace(reg, ""); var resultArr = result.split(";"); for (var i = 0; i < resultArr.length; i++) { var nameArr = resultArr[i].split("="); if (nameArr[0] == name) { return nameArr[1]; } } }, "removeCookie": function (name) { //name为想要删除的Cookie的键名 var oDate = new Date();//时间对象 oDate.setDate(new Date().getDate() - 1); document.cookie = name + "=123;expires=" + oDate + ";path=/"; } }
注意:这里的lifeCircle是按天算的。
后来调整到当天24点过期,这中间有两个问题可以注意一下。
一是谷歌的过期时间格式和其他浏览器不同,会出现北京时间(东八区)8个小时的时差,这不是尴尬了嘛。
二是火狐用firebug看过期时间表达方式我是真一下没反应过来,下午12:00,这还真就是晚上24:00。
好了,看我后来是怎么改好的。
主要思路是当日剩余时间就是生命周期,然后当前时间加上剩余时间转化为日期格式,中间会有一个问题是时间格式问题,国际标准时间,和中国标准(北京)时间是相差8小时的时差的,但是这个问题只有在谷歌上才会有,所以通过浏览器判断即可进行区分。
//自定义cookie对象 var cookie = { "setCookie": function(name, value) { var curDate = new Date(); //当前时间戳 var curTamp = curDate.getTime(); //当前日期 var curDay = curDate.toLocaleDateString(); var brow = $.browser; var curWeeHours = 0; if (brow.safari) { //当日凌晨的时间戳,减去一毫秒是为了防止后续得到的时间不会达到00:00:00的状态 curWeeHours = new Date(curDay).getTime() + (8 * 60 * 60 * 1000) - 1; } else { curWeeHours = new Date(curDay).getTime() - 1; } //当日已经过去的时间(毫秒) var passedTamp = curTamp - curWeeHours; //当日剩余时间 var leftTamp = 24 * 60 * 60 * 1000 - passedTamp; var leftTime = new Date(); leftTime.setTime(leftTamp + curTamp); //创建cookie document.cookie = name + "=" + value + ";expires=" + leftTime.toGMTString() + ";path=/"; }, "getCookie": function(name) { //name 为想要取到的键值的键名 var reg = /\s/g; var result = document.cookie.replace(reg, ""); var resultArr = result.split(";"); for (var i = 0; i < resultArr.length; i++) { var nameArr = resultArr[i].split("="); if (nameArr[0] == name) { return nameArr[1]; } } }, "removeCookie": function(name) { //name为想要删除的Cookie的键名 var oDate = new Date(); //时间对象 oDate.setDate(new Date().getDate() - 1); document.cookie = name + "=123;expires=" + oDate + ";path=/"; } }
其实,在h5时代,我们可以换用其他的存储形式了。比如localstorage,sessionstorage等。不过我们的用户要兼容IE7,整天以泪洗面。
相关文章推荐
- JS如何设置cookie有效期为当天24点并弹出欢迎登陆界面
- Server中的Cookie过期问题
- 利用js的cookie来解决domino中frame中的页面返回异常的问题!
- ASP.Net和JS对Cookie的互操作问题
- jQuery.cookie.js中cookie设置遇到的问题
- 写入cookie 的过期时间时在GMT或UTC时间格式上的兼容问题
- 在让Cookie过期时遇到的问题。
- js获取cookie乱码问题的解决办法……
- ASP.Net和JS对Cookie的互操作问题
- php、asp.net关于后台设置的cookie前台JS获取时出现中文乱码问题解决
- js设置,删除,添加cookie,同时解决在目录下,不能设置、删除和添加的问题
- 关于cookie 的过期问题
- js中cookie的增删改查问题
- ASP.Net和JS对Cookie的互操作问题
- js解决cookie跨域访问的问题
- JS--逆向处理网页过期问题
- js 正规表达式 /g 选项在 firefox chrome 的奇怪问题
- ASP.Net和JS对Cookie的互操作问题
- js汉字排序问题 支持中英文混排,兼容各浏览器,包括CHROME
- js设置,删除,添加cookie,同时解决在目录下,不能设置、删除和添加的问题