为什么一串数字与新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会自动解析字符串吗?
答案 0 :(得分:4)
请参阅the docs。
您正在有效地调用两个不同的构造函数。
第一个被解析为人类可读的日期:
new Date(dateString)
第二个参数需要3个或更多参数,提供一年, 0 月份数和一天
new Date(year, month, day [, hour, minute, second, millisecond]);
<强>年强>
表示年份的整数值。为了兼容性(为了避免Y2K问题),您应该始终指定年份;使用1998,而不是98。
<强>月强>
表示月份的整数值,从1月的0开始到12月的11。
<强>天强>
表示月中某天(1-31)的整数值。
答案 1 :(得分:2)
直到ES5,日期字符串的解析完全依赖于实现,尽管有一个或两个字符串被多个浏览器一致地解析。 ES5引入了parsing的version of ISO8601,但所有使用的浏览器都不支持它。
最好手动解析日期字符串以确保它们是正确的。有各种各样的库可以帮助解决这个问题,但这并不困难(2行代码)。
顺便说一句,没有 Date.prototype.value 方法,因此您可能正在将 undefined 与自身进行比较。你应该比较时间值,所以:
myfirstDate.getTime() == mysecondDate.getTime();
或只是:
myfirstDate == mysecondDate;
哦,回答这个问题:当Date函数作为构造函数with a single string argument调用时,它被视为日期字符串并进行解析(参见上文)。所以“10”代表十月。
当Date作为具有more than one argument的构造函数调用时,它们被视为日期值,因此9
被视为10月,因为月份参数为零索引(0 = 1月,1 = 2月等。 )。