6

我正在尝试编写一些 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了 May 的示例,但在 Firefox 上,我有1913-05-01.

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

谢谢 !

4

1 回答 1

5

规格

但是,表达式 Date.parse(x.toLocaleString()) 不需要生成与前面三个表达式相同的 Number 值,通常,当给定任何 String 值时,由 Date.parse 生成的值取决于实现不符合日期时间字符串格式 (15.9.1.15),并且在该实现中无法通过 toString 或 toUTCString 方法生成。

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

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

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

于 2013-05-14T09:20:33.123 回答