在设置cookie时指定到期日期,我可以使用哪些日期格式?

时间:2012-06-21 10:40:40

标签: javascript cookies

我正在使用设置cookie的功能。此功能允许将cookie名称,cookie值和cookie的额外到期日期传递给它。

功能:

function setCookie(name, value, exdate) {
    var c_value = escape(value) + ((exdate === null || exdate === undefined) ? "" : "; expires=" + exdate);
    document.cookie = name + "=" + c_value;
};

用法:

setCookie("my-cookie-name","my-value","Sun, 15 Jul 2012 00:00:01 GMT");

我已经使用了上面日期格式的函数,并且相信它是跨浏览器兼容的,因为我已经测试过,如果cookie在关闭各种浏览器并重新打开后仍然存在。我发现使用像"15 Jul 2012"这样的格式时会出现问题。这种格式在firefox的开发过程中适用于我,但其他浏览器似乎只将cookie设置为会话cookie。

我应该坚持使用这种格式:“Sun,2012年7月15日00:00:01格林威治标准时间”或者是否有其他格式我可以用于有效期限的主要浏览器(IE 7) -9,Firefox,Chrome,Opera,Safari)?

修改/更新:

Cookie要求有效期限为 UTC / GMT格式(请参阅下面的答案)。

我已将我的功能编辑为以下内容,以便转换任何不是核心格式的日期。

function setCookie(name, value, exdate) {
        //If exdate exists then pass it as a new Date and convert to UTC format
        (exdate) && (exdate = new Date(exdate).toUTCString());
        var c_value = escape(value) + ((exdate === null || exdate === undefined) ? "" : "; expires=" + exdate);
        document.cookie = name + "=" + c_value;
    };

3 个答案:

答案 0 :(得分:33)

根据测试并进一步阅读此内容,Cookie需要 UTC / GMT格式的日期,例如 Sun,2012年7月15日00:00:01 GMT

因此,其他格式的日期,例如 2012年7月15日,或 15 / Jul / 2012 07/15/2012 ,必须作为new Date对象传递,然后通过toUTCString()toGMTString()函数传递。

因此我将我的功能编辑为以下内容:

function setCookie(name, value, exdate) {
    //If exdate exists then pass it as a new Date and convert to UTC format
    (exdate) && (exdate = new Date(exdate).toUTCString());
    var c_value = escape(value) + ((exdate === null || exdate === undefined) ? "" : "; expires=" + exdate);
    document.cookie = name + "=" + c_value;
};

答案 1 :(得分:3)

The syntax specified in rfc 6265 for generating Set-Cookie headers使用
rfc1123-date = wkday "," SP date1 SP time SP "GMT" Cookie日期格式,因此"Sun, 15 Jul 2012 00:00:01 GMT"有效。

如果我理解正确,parsing algorithm会识别其他格式,例如:00:00:01 15 jul 2012,但不应生成它们。

答案 2 :(得分:0)

找到日期格式MMMM dd,yyyy,hh:mm:ss aaa。愿有人发现有用。这里也非常好的链接enter link description here