JS Cookie当天24点过期,chrome时差问题

这个问题已经过去好些天了,当时为了上一个教师节的专题,里面有一个点赞的功能需要用到cookie存储记录。一开始自己写没注意,只知道运营说一天只能点赞一次,后来他们又说要当天24点之后就又可以在点赞,当然啦,这需求改的挺好的。检查的时候发现,尼玛之前写的cookie过期时间都到2025年去了,吓得一身冷汗。是我错了,把天当毫秒用了。

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,整天以泪洗面。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值