请帮助打破组件上的日期行。
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('---');
答案 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'分隔日期和时间来使日期有效,或者你可以使用斜线而不是破折号。