为什么一串数字的工作方式与新日期中的实际数字不同

Why does a string of numbers work differently than actual numbers in a new Date?

本文关键字:数字 日期 方式 一串 工作 为什么 新日期      更新时间:2023-09-26

为什么一串数字与新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 会自动解析字符串吗?

查看文档。

您实际上是在调用两个不同的构造函数。

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

new Date(dateString)

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

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

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

表示

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

表示月份中的某一天 (1-31) 的整数值。

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

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

顺便说一下,没有Date.prototype.value方法,所以很可能你正在将undefined与它进行比较。您应该比较时间值,因此:

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

或只是:

myfirstDate == mysecondDate;

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

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