为什么firefox不会破坏日期?

时间:2016-04-08 14:11:32

标签: javascript

请帮助打破组件上的日期行。

https://jsfiddle.net/xwvrtLt1/2/

Chrome中的

有效(控制台显示日期没有问题)。但在FF中它不起作用(控制台显示错误)

JS:

var checkNeedZero = function(num) { 
    if(num < 10) { num = '0' + num; };
    return num;
};             


var dateRaw = '2016-03-14 17:37:12';

var date = new Date(dateRaw),
    monthNum = checkNeedZero(date.getMonth()),
    day = checkNeedZero(date.getDate()),
    year = date.getFullYear(),
    hours = checkNeedZero(date.getHours()),
    minutes = checkNeedZero(date.getMinutes());

console.log(date);

var vv = new Date(dateRaw);
console.log(vv);
console.log('---'); 

2 个答案:

答案 0 :(得分:3)

日期格式无效,但两种不同的浏览器对其进行区别对待(Chrome在无效日期附近工作,而Firefox会引发错误)。

要使其有效,您可以在日期和时间之间添加T字符:

var dateRaw = '2016-03-14T17:37:12';
  

但我以某种格式获取日期。我无法改变它

在这种情况下,您需要使用JavaScript添加T字符:

var dateRaw = '2016-03-14 17:37:12'.replace(' ', 'T');

这会将(空格)字符替换为T字符。

答案 1 :(得分:3)

在Date构造函数中,它们使用与Date.parse(string)中相同的机制,后者的优点是它不会为无效日期抛出错误,而是返回NaN

此链接:https://msdn.microsoft.com/en-us/library/ff743760(v=vs.94).aspx#Anchor_2描述了哪些日期被认为有效,主要是简化的ISO8601格式(YYYY-MM-DDTHH:mm:ss.sssZ - 仅适用于Internet Explorer 9及更高版本而不是怪癖模式)然后尝试完整的格式列表:https://msdn.microsoft.com/en-us/library/ff743760(v=vs.94).aspx#Anchor_4

ECMA脚本标准6.0支持ISO8601格式:http://www.ecma-international.org/ecma-262/6.0/#sec-date-time-string-format,但随后说如果失败,可以尝试特定的供应商实现。

底线:你可以通过用大写'T'分隔日期和时间来使日期有效,或者你可以使用斜线而不是破折号。