Javascript 在 Firefox 上给出 'Invalid Date'
Javascript on Firefox gives 'Invalid Date'
我没有询问用户他们喜欢的时区,而是让服务器提供 UTC 时间和一个小的 Javascript,它在浏览器端将其转换为本地时间。以下片段在 Chrome 中有效,但在 Firefox 中无效。为什么?
是否有在任何合理的浏览器中将 UTC 时间转换为本地时间的通用方法?
var timestamp_utc="2016-06-16 15:43:40.086670";
n = timestamp_utc.indexOf('.');
document.write((new Date(Date.parse(timestamp_utc.substring(0, n != -1 ? n : s.length)+" UTC"))).toLocaleString());
对,放在the specification's date/time format里。在您的情况下,您可以通过将 space 更改为 T
并在末尾添加 Z
来实现:
var dt = new Date(timestamp_utc.replace(" ", "T") + "Z");
除非您愿意,否则无需删除小数部分。如果你想,而且你确定它在那里,那么:
var dt = new Date(timestamp_utc.split(".")[0].replace(" ", "T") + "Z");
示例:
var timestamp_utc = "2016-06-16 15:43:40.086670";
console.log(new Date(timestamp_utc.replace(" ", "T") + "Z"));
console.log(new Date(timestamp_utc.split(".")[0].replace(" ", "T") + "Z"));
注意:Date.parse(String)
和 new Date(String)
使用相同的解析算法,所以永远不需要 new Date(Date.parse(x))
。
我没有询问用户他们喜欢的时区,而是让服务器提供 UTC 时间和一个小的 Javascript,它在浏览器端将其转换为本地时间。以下片段在 Chrome 中有效,但在 Firefox 中无效。为什么?
是否有在任何合理的浏览器中将 UTC 时间转换为本地时间的通用方法?
var timestamp_utc="2016-06-16 15:43:40.086670";
n = timestamp_utc.indexOf('.');
document.write((new Date(Date.parse(timestamp_utc.substring(0, n != -1 ? n : s.length)+" UTC"))).toLocaleString());
对,放在the specification's date/time format里。在您的情况下,您可以通过将 space 更改为 T
并在末尾添加 Z
来实现:
var dt = new Date(timestamp_utc.replace(" ", "T") + "Z");
除非您愿意,否则无需删除小数部分。如果你想,而且你确定它在那里,那么:
var dt = new Date(timestamp_utc.split(".")[0].replace(" ", "T") + "Z");
示例:
var timestamp_utc = "2016-06-16 15:43:40.086670";
console.log(new Date(timestamp_utc.replace(" ", "T") + "Z"));
console.log(new Date(timestamp_utc.split(".")[0].replace(" ", "T") + "Z"));
注意:Date.parse(String)
和 new Date(String)
使用相同的解析算法,所以永远不需要 new Date(Date.parse(x))
。