此代码:
var dt = new Date('82/66/2005');
...在Firefox上为dt
提供 1992年11月25日星期三00:00:00 GMT + 0530(IST)。
如何?
答案 0 :(得分:1)
该日期的格式不是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开头。)
答案 1 :(得分: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
,这与你的浏览器如何计算它非常接近(它不需要估计)。