JS Date()需要不正确的数据才能返回正确的结果

时间:2013-03-18 20:37:50

标签: javascript date cookies

我正在创建一个必须“永不”过期的cookie,虽然我不确定这是否可能,作为妥协,我决定将“expires:”日期设置为2099/12/31 23:59 :59。但是,要获得此日期,我需要将其设置如下:

var killdate = new Date(2099, 11, 31, 23, 59, 59);

现在,除非我错过了什么,否则11月31日没有,所以我为什么要这样设定日期呢?

这是一个好奇的事情,而不是我的代码的一个主要问题(虽然,我想确保我没有搞砸任何东西)但我的在线研究并没有成功地为我清理它

由于

3 个答案:

答案 0 :(得分:2)

来自MDN docs

  

<强>月
      表示月份的整数值,从1月的0开始到12月的11。

月份从0-11开始,而不是1-12。事实上,你设定的日期是2099年12月31日。

答案 1 :(得分:0)

请注意,某些浏览器在2038之后的日期出现问题(当unix epoch time超过32-bit int时)

var killdate = new Date(2099, 11, 31, 23, 59, 59);

现在,除非我错过了什么,否则11月31日没有,所以我为什么要这样设定日期

这只是未来使用的日期,距离现在已经足够了。在您的示例中,日期实际为31-Dec-2099 23:59:59(月份从0到11)

仅为知识您的好奇心

JS Date对象是从Java 1.0移植的,这就是原因。继承其所有缺陷。

除了当月的所有日期都是0,see here for a full list including ranges

答案 2 :(得分:0)

天数占任何给定月份的较长天数,而非特定月份。

Max hours = 23
Max minutes = 59
Max seconds = 59
Max days = 31
Max months = 12
Max years = varies/changes

他们从不相互依赖。我认为,如果你使用的是UNIX时间戳,那么它们就占了这个月的日子。