我有一个日期格式无效的签发日期,但日期是无效
2016年3月3日20:01
而且我有一个代码
aData._date = new Date(aData[3]).getTime();
错误是日期无效,但是,在不同的计算机上它运行良好,但现在它不工作。问题是什么?
在此先感谢
我有一个日期格式无效的签发日期,但日期是无效
2016年3月3日20:01
而且我有一个代码
aData._date = new Date(aData[3]).getTime();
错误是日期无效,但是,在不同的计算机上它运行良好,但现在它不工作。问题是什么?
在此先感谢
你可以先分析你的日期字符串ISO8601格式。
'03.03.2016 20:01' to '2016-03-03T20:01:00'
当您通过日期字符串Date
构造函数,它调用Date.parse方法。它只接受ISO8601的一个版本。但不知何故,chrome具有扩展功能,可将类似日期的字符串解析为Date.parse
方法。
如果您不想使用外部库,这是实现您想要的一种方法。
var dateStr = aData[3]; // 03.03.2016 20:01
var matches = dateStr.match(/[0-9]+/g);
var year = matches[2];
var month = matches[1];
var day = matches[0];
var hour = matches[3];
var minute = matches[4];
var formattedDateStr = year + '-' + month + '-' + day + 'T' + hour + ':' + minute;
aData._date = new Date(formattedDateStr).getTime();
问题是什么?使用Date构造字符串
解析(或Date.parse,两者是等价的解析)在很大程度上是依赖于实现的,因此不推荐。手动解析字符串,如果您只需处理单一格式,或者使用一个库(有许多好的选择),则使用小函数进行手动解析,否则提供格式。
ECMAScript 2015指定Date.parse正确解析ISO 8601扩展格式日期,但是任何其他格式都是依赖于实现的。许多正在使用的浏览器不正确(即按规范)解析ISO 8601格式的日期。
“03.03.2016 20:01”不是ISO 8601日期格式。假设它的DD.MM.YYYY HH:MM可以解析为一个本地日期和时间使用:
function parseDMYHM(s){
var b = ('' || s).split(/\D/);
return new Date(b[2], b[1]-1, b[0], b[3], b[4]);
}
document.write(parseDMYHM('03.03.2016 20:01'));
或者,如果你有一个图书馆有解析函数接受格式来解析(像这样的图书馆是任何好的意愿),使用类似的东西:
var d = parse('03.03.2016 20:01', 'DD.MM.YYYY hh:mm');
不错的做法..我建议OP去第二个是创建自己的'parse'方法.. – choz
因为在你的不同的计算机上,你使用的是Firefox。现在你正在使用chrome。只有那些可以将不明确的日期格式字符串解析成日期对象的chrome。 – choz
我该如何在Chrome和Firefox上运行这个? –
您可以轻松使用'moment.js'。或解析日期字符串为ISO8601格式第一个 – choz