为什么这个Javascript在Firefox中不起作用?
我试图用一些简单的Javascript来操纵一个日期。代码如下:为什么这个Javascript在Firefox中不起作用?,javascript,date,Javascript,Date,我试图用一些简单的Javascript来操纵一个日期。代码如下: var newDate = new Date("2013-07-23" + " 12:00:00"); console.log(newDate.toString()); newDate = new Date(newDate.getTime() - (24 * 60 * 60 * 1000)); console.log(newDate.toString()); var date = newDate.getFullYear() + "
var newDate = new Date("2013-07-23" + " 12:00:00");
console.log(newDate.toString());
newDate = new Date(newDate.getTime() - (24 * 60 * 60 * 1000));
console.log(newDate.toString());
var date = newDate.getFullYear() + "-" + ("0" + (newDate.getMonth() + 1)).slice(-2) + "-" + ("0" + newDate.getDate()).slice(-2);
console.log(date);
本质上,我正在转变
2013-07-23 -> Jul 22 2013 12:00:00 GMT+1000 -> 2013-07-22
它在Chrome中运行良好,您可以通过它来测试代码。它总是回来
"Invalid Date"
"Invalid Date"
"NaN-aN-aN"
对于Firefox中的三个控制台.log
,但是:
Tue Jul 23 2013 12:00:00 GMT+1000 (E. Australia Standard Time)
Mon Jul 22 2013 12:00:00 GMT+1000 (E. Australia Standard Time)
2013-07-22
对于Chrome。您的日期格式应该是“符合IETF的RFC 2822时间戳”,如果不是,则存在一些跨浏览器的不一致性 请在此处阅读:
但基本上-您只需将“
-
”替换为“/
”,即可使其在任何现有浏览器上工作。规范不要求解析日期格式YYYY-MM-DD HH:MM:SS
:
新日期
:
以与Parse方法完全相同的方式将v解析为日期
(本质上,与Date.parse(…)
的结果相同)
Date.parse
:
函数首先尝试根据日期时间字符串格式(15.9.1.15)中调用的规则解析字符串的格式。如果字符串不符合该格式,函数可能会退回到任何特定于实现的启发式或特定于实现的日期格式。无法识别的字符串或格式字符串中包含非法元素值的日期将导致Date.parse返回NaN
日期时间字符串格式:
格式如下:YYYY-MM-DDTHH:MM:ss.sssZ
不保证任何其他格式有效,包括YYYY-MM-DD HH:MM:SS
始终可以构造一致的日期字符串:
var newDate = new Date("2013-07-23" + "T12:00:00.000Z");
console.log(newDate.toString());
newDate = new Date(newDate.getTime() - (24 * 60 * 60 * 1000));
console.log(newDate.toString());
var date = newDate.getFullYear() + "-" + ("0" + (newDate.getMonth() + 1)).slice(-2) + "-" + ("0" + newDate.getDate()).slice(-2);
console.log(date);
在Firefox中:
new Date("2013-07-23 12:00:00").toString() // Invalid
new Date("2013-07-23T12:00:00").toString() // Local noon
new Date("2013-07-23T12:00:00Z").toString() // UTC noon
new Date("2013/07/23 12:00:00").toString() // Local noon
镀铬:
new Date("2013-07-23 12:00:00").toString() // Local noon
new Date("2013-07-23T12:00:00").toString() // UTC noon
new Date("2013-07-23T12:00:00Z").toString() // UTC noon
new Date("2013/07/23 12:00:00").toString() // Local noon
还有许多其他不一致之处。例如,Chrome本身甚至不一致:
new Date("2013-07-23 00:00:00").toString() // Local midnight
new Date("2013-07-23").toString() // UTC midnight
如果需要以一致的方式解析字符串中的日期,则应该考虑使用诸如.< /p>这样的库。
主要的优点是,您可以控制输入和输出格式,并且在所有浏览器中的工作方式都是相同的
moment("2013-07-23 12:00:00", "YYYY-MM-DD HH:mm:ss").format() // Local noon
moment.utc("2013-07-23 12:00:00", "YYYY-MM-DD HH:mm:ss").format() // UTC noon