Chrome 无法将日期字符串转换为 YYYY/MM/DD PM hh:mm 格式的日期
Chrome cannot convert date string to date in format YYYY/MM/DD PM hh:mm
我认为 Chrome 是最灵活的浏览器,但它在以下情况下不起作用:
newrecorddate = "2015/10/20 PM 06:09"
var d = new Date(newrecorddate);
console.log("d="+d);
在IE11中,日期(d)返回成功。在 Chrome 中返回 "Invalid Date"。我该如何解决?
更新:
Dai的代码确实解决了问题所以标记为答案。这是我使用的代码:
var r = /(\d{4})\/(\d{1,2})\/(\d{1,2}) (PM|AM) (\d{2})\:(\d{2})/;
if( newRecordDate.match( r ) ) {
var ymd = newRecordDate.split(" ")[0];
var tt = newRecordDate.split(" ")[1];
var tod = newRecordDate.split(" ")[2];
var d = new Date( ymd + " " + tod + " " + tt );
}
return d;
(免责声明:我曾参与过 Microsoft 的 JavaScript 引擎 Chakra)
ECMAScript 的规范没有列出 Date
的构造函数必须成功解析的格式,实际上大多数实现通常会成功读取几乎所有可用的 non-ambiguous 格式,无论您使用的是哪种格式, YYYY/MM/dd tt HH:mm
不是现实中看到的格式(tt
在中间而不是最后)。一个好的启发式实现可能能够猜测它,但它有助于不必猜测或依赖语言规范中不存在的任何功能支持。
您必须自己解析日期,重新格式化,然后将其传递给 Date
的构造函数,幸运的是正则表达式使这变得简单:
var r = /(\d{4})/(\d{2})/(\d{2}) (PM|AM) (\d{2})\:(\d{2})/;
if( r.match( newRecordDate ) ) {
var ymd = newRecordDate.substr( 0, 10 ); // note substr instead of substring
var tt = newRecordDate.substr( 11, 2 );
var tod = newRecordDate.substr( 14, 5 );
var d = new Date( ymd + " " + tod + " " + tt );
}
应该可以。虽然未经测试。
我认为 Chrome 是最灵活的浏览器,但它在以下情况下不起作用:
newrecorddate = "2015/10/20 PM 06:09"
var d = new Date(newrecorddate);
console.log("d="+d);
在IE11中,日期(d)返回成功。在 Chrome 中返回 "Invalid Date"。我该如何解决?
更新:
Dai的代码确实解决了问题所以标记为答案。这是我使用的代码:
var r = /(\d{4})\/(\d{1,2})\/(\d{1,2}) (PM|AM) (\d{2})\:(\d{2})/;
if( newRecordDate.match( r ) ) {
var ymd = newRecordDate.split(" ")[0];
var tt = newRecordDate.split(" ")[1];
var tod = newRecordDate.split(" ")[2];
var d = new Date( ymd + " " + tod + " " + tt );
}
return d;
(免责声明:我曾参与过 Microsoft 的 JavaScript 引擎 Chakra)
ECMAScript 的规范没有列出 Date
的构造函数必须成功解析的格式,实际上大多数实现通常会成功读取几乎所有可用的 non-ambiguous 格式,无论您使用的是哪种格式, YYYY/MM/dd tt HH:mm
不是现实中看到的格式(tt
在中间而不是最后)。一个好的启发式实现可能能够猜测它,但它有助于不必猜测或依赖语言规范中不存在的任何功能支持。
您必须自己解析日期,重新格式化,然后将其传递给 Date
的构造函数,幸运的是正则表达式使这变得简单:
var r = /(\d{4})/(\d{2})/(\d{2}) (PM|AM) (\d{2})\:(\d{2})/;
if( r.match( newRecordDate ) ) {
var ymd = newRecordDate.substr( 0, 10 ); // note substr instead of substring
var tt = newRecordDate.substr( 11, 2 );
var tod = newRecordDate.substr( 14, 5 );
var d = new Date( ymd + " " + tod + " " + tt );
}
应该可以。虽然未经测试。