0

为什么在 new Date() 中一串数字与实际数字的工作方式不同:

var myfirstDate = new Date("2013, 10, 15"); //returns Tue Oct 15 2013 00:00:00 GMT-0500 (CDT)
var mysecondDate = new Date(2013, 9, 15); // also returns Tue Oct 15 2013 00:00:00 GMT-0500 (CDT)

myfirstDate.value == mysecondDate.value; //returns true

我查看了几个教程,甚至没有提到像上面的 myfirstDate 这样的字符串的想法。javascript会自动解析字符串吗?

4

2 回答 2

4

请参阅文档

您有效地调用了两个不同的构造函数。

第一个被解析为人类可读的日期:

new Date(dateString)

第二个需要 3 个或更多参数,提供年份、从0 开始的月份数和一天

new Date(year, month, day [, hour, minute, second, millisecond]);

表示年份的整数值。为了兼容性(为了避免 Y2K 问题),您应该始终指定完整的年份;使用 1998,而不是 98。

表示月份的整数值,从 0 开始表示一月到 11 表示十二月。

表示月份中日期的整数值 (1-31)。

于 2013-10-16T22:17:01.637 回答
2

在 ES5 之前,日期字符串的解析完全依赖于实现,尽管有几个浏览器一致地解析了一两个字符串。ES5 引入了对 ISO8601 版本的解析,但并非所有正在使用的浏览器都支持它。

最好手动解析日期字符串以确保它们是正确的。有各种库可以帮助解决这个问题,但这并不困难(2 行代码)。

顺便说一句,没有Date.prototype.value方法,因此您可能正在将undefined与自身进行比较。您应该比较时间值,因此:

myfirstDate.getTime() == mysecondDate.getTime();

要不就:

myfirstDate == mysecondDate;

哦,回答这个问题:当 Date 函数作为具有单个字符串参数的构造函数调用时,它被视为日期字符串并被解析(见上文)。所以“10”代表十月。

当 Date 被调用为具有多个参数的构造函数时,它们被视为日期值,因此9被视为十月,因为月份参数是零索引的(0=一月,1=二月等)。

于 2013-10-16T22:17:45.217 回答