2013-03-18 131 views
-1

我正在创建一个必须“永不”过期的cookie,尽管我不确定这是否可能,所以作为折衷,我已决定设置“过期: “日期到2099/12/31 23:59:59。然而,要达到这个日期,我需要进行如下设置:JS Date()需要不正确的数据才能返回正确的结果

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

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

这是一个比我的代码的主要问题更好奇的事情(虽然我想确保我没有弄脏任何东西),但是我的在线研究并没有完全成功地清除它我。

感谢

回答

2

MDN docs

月代表月份,以0开头的1月至11月为
整数 价值。

几个月从0-11运行,而不是1-12。你设置的日期,事实上,12月31日,2099年

+0

啊,是的。当然。我甚至没有想到这一点(这也解释了为什么我没有在线搜索的喜悦......我正在彻底搜寻错误的球场)。感谢您的快速回复 – UbuntuElphie 2013-03-18 20:45:20

0

要知道,有些浏览器有问题,日期过去2038(当unix epoch time超过32-bitint

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

现在,除非我错过了什么,11月31日没有,为什么我必须将日期设置为

这只是从现在开始使用的远期日期。在你的榜样的日期实际上是31-Dec-2099 23:59:59(月数为0至11)

只是对知识AS你的好奇心的:

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

一切,但一个月的一天是从0开始,see here for a full list including ranges

+0

好的,但这应该是一个评论,而不是一个答案,因为它不试图回答为什么十二月是11的实际问题。 – nnnnnn 2013-03-18 20:45:45

0

的日子占了较长天的任何一个月,而不是特定的一个。

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

他们从不相互依赖。我认为,如果您使用UNIX时间戳,它们会计算当月的日期。