我是靠谱客的博主 听话煎蛋,最近开发中收集的这篇文章主要介绍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,整天以泪洗面。

最后

以上就是听话煎蛋为你收集整理的JS Cookie当天24点过期,chrome时差问题的全部内容,希望文章能够帮你解决JS Cookie当天24点过期,chrome时差问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(37)

评论列表共有 0 条评论

立即
投稿
返回
顶部