日期从字符串给出不同的输出从Chrome到Firefox

Javascript Date from string giving different output from Chrome to Firefox

本文关键字:输出 Chrome Firefox 字符串 日期      更新时间:2023-09-26

我正在尝试编写一些javascript代码来格式化我想要的日期,但我在Firefox上工作时遇到了麻烦(它在Chrome上工作时我想要的)。

我的输入是05/01/13 (mm/dd/yy),我想要2013-05-01 (yyyy/mm/dd)。

对此,我所做的是这样的:

var formDate = document.getElementById("start").value;
var myDate = new Date(formDate);
var startDate = new Date();
startDate.setMonth(myDate.getMonth() + 1);
startDate.setFullYear(myDate.getFullYear());
var FormattedDate = startDate.getFullYear() + "-" + ((startDate.getMonth() <= 10) ? "0" : "") + startDate.getMonth() + "-01"; // the day is always 01
alert(FormattedDate);

你可以在这两个浏览器上试试:http://jsfiddle.net/j4BLH/

在Google Chrome上,这段代码给了我例如2013-05-01为五月,但在Firefox上,我有1913-05-01

我知道我可以写像"20" + startDate.getYear()的东西,但我想知道为什么从Chrome到Firefox的结果不同?也许如果你有更好的方法来写我粘贴在这里的代码,请告诉我:)

谢谢!

From the spec:

但是,表达式Date.parse(x.toLocaleString())不是必需的生成与前面三个表达式相同的Number值以及通常由Date产生的值。解析当给定任何不依赖于实现的String值时符合日期时间字符串格式(15.9.1.15),不能在该实现中由toString或toUTCString产生方法。

通过向构造函数传递日期字符串来创建日期对象时,解析方法与date .parse完全相同。

使用2位数年份的日期格式不符合标准。因此,这些日期的解析方式似乎是特定于实现的,这意味着它取决于所使用的Javascript引擎。在谷歌的例子中,通常是V8,而在Firefox中,我相信是TraceMonkey或Rhino。

简而言之,你应该使用4位数的年,因为JS标准中没有YY。