-1

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

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

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

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

谢谢

4

3 回答 3

2

来自MDN 文档

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

月份从 0 到 11,而不是 1 到 12。实际上,您设置的日期是 2099 年 12 月 31 日。

于 2013-03-18T20:39:56.347 回答
0

请注意,某些浏览器存在日期过去的问题2038unix epoch time超过 a时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 开始的,请参阅此处以获取包括范围在内的完整列表

于 2013-03-18T20:42:04.620 回答
0

这些天数是指任何给定月份中较长的天数,而不是特定的天数。

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

They never depend on each other. I think that if you're using UNIX timestamps they account for the days of the month.

于 2013-03-18T20:42:51.370 回答