这段代码:
var dt = new Date('82/66/2005');
...在 Firefox 上给出1992 年 11 月 25 日星期三 00:00:00 GMT+0530 (IST)dt
的值。
如何?
这段代码:
var dt = new Date('82/66/2005');
...在 Firefox 上给出1992 年 11 月 25 日星期三 00:00:00 GMT+0530 (IST)dt
的值。
如何?
该日期不是Date
构造函数指定支持的格式。我发现大多数引擎都称它无效,我并不感到惊讶,但显然 Firefox 正试图对此做出判断。即使没有指定,大多数引擎month/day/year
都支持,最后我检查了一下,支持year/month/day
. Firefox 似乎正在应用于year/month/day
输入,大多数浏览器会看到无效值并使用“无效”。
所以 Firefox 看到82
的是年(假设是 1982 年)、66
月和2005
日。JavaScript 通常对日期的越界值、移动到下个月等必要时非常宽容。这就是这里发生的事情:如果你取 1982 年 1 月 1 日,再加上 65 个月和 2004 天,你会在 1992 年 11 月 25 日结束。
此代码将可靠地为您提供您提到的日期:
var dt = new Date(1982, 65, 2005);
(65 而不是 66,因为在数字形式中,月份从 0 开始,但在字符串形式中,它们从 1 开始。)
我无法在Chrome中重新生成它,但我将解释FireFox是如何到达这里的。
new Date('82-66-2005');
日期无效,让我们根据我们对日期的了解来猜测您想要什么。
-
格式通常是yyyy-mm-dd
yy
简称19yy
12
几个月,所以月份13
是明年的Januaray因此,使用这些知识可以估计它,假设365.25
每年的30.5
天数和每月的天数。
// input
var year = 1982, // 19yy
bigMonth = 66,
bigDay = 2005;
// adjust day for years
var day = bigDay % 365.25;
year = year + (bigDay - day) / 365.25;
// adjust day for months
bigDay = day;
day = bigDay % 30.5;
bigMonth = bigMonth + (bigDay - day) / 30.5;
// adjust month for years
var month = bigMonth % 12;
year = year + (bigMonth - month) / 12;
console.log(year, month, day); // 1992 11 26.25
所以这将是关于Nov 26th, 1992
,这与您的浏览器计算它的方式非常接近(它不需要估计)。