与大多数浏览器兼容的JavaScript新日期(字符串)(2016年12月)

与大多数浏览器兼容的JavaScript新日期(字符串)(2016年12月),javascript,Javascript,在JavaScript中创建新日期(字符串)时,我一直在处理这个恼人的错误。我的问题是,有没有人找到一个更好/更标准化的解决方案,可以在大多数浏览器上使用?例如,我发现IE9不喜欢.sss(毫秒),那么Firefox不能正确使用欧洲日期格式(DD-MM-YYYY) 让我知道你的想法 根据MDN: 注意:由于浏览器差异和不一致,强烈建议使用日期构造函数(和date.parse,它们是等效的)解析日期字符串。仅按惯例支持RFC 2822格式字符串。对ISO 8601格式的支持不同之处在于,仅日期字符

在JavaScript中创建新日期(字符串)时,我一直在处理这个恼人的错误。我的问题是,有没有人找到一个更好/更标准化的解决方案,可以在大多数浏览器上使用?例如,我发现IE9不喜欢.sss(毫秒),那么Firefox不能正确使用欧洲日期格式(DD-MM-YYYY)

让我知道你的想法

根据MDN:

注意:由于浏览器差异和不一致,强烈建议使用日期构造函数(和date.parse,它们是等效的)解析日期字符串。仅按惯例支持RFC 2822格式字符串。对ISO 8601格式的支持不同之处在于,仅日期字符串(例如“1970-01-01”)被视为UTC,而不是本地字符串

这同样适用于
Date.parse()
。如果您担心这种不一致(因为您的浏览器支持非常广泛,或者因为您处理来自外部源的数据),您可以始终使用完整构造函数:

new Date(year, month, [day, hour, minute, second, millisecond])
括号之间的参数是可选的。如果您可以使用可靠的工具(如您所提到的
moment.js
)解析日期,那么您就可以使用此工具构建本机
date
,而不会有任何危险


它很麻烦,但是把它打包成一个函数,再也不看它了。

我发现适用于大多数浏览器的字符串格式如下

stringFormat = moment(dateObject).format("YYYY-MM-DDTHH:mm:ss");
date = new Date(stringFormat);
我使用momente.js提供了更进一步的兼容性,到目前为止,它在IE9+、Chrome和Firefox上运行良好。但我花了很多论坛和SOF中的其他响应来找到一个好的解决方案

最大的问题是与较旧的浏览器、语言环境格式等兼容。例如,这几乎是正确的,但我发现IE9不喜欢.sss(毫秒),也不起作用。Firefox在欧洲日期格式上也有错误

有没有人有更好的方法来处理这个问题?
请分享知识!:)

嘿!欢迎来到堆栈溢出!Stack Overflow是一个问答网站,因此问题应该是问答。你能把你的问题变成一个问题,然后在下面加上答案和答案吗?这样,问题和答案就可以分开投票,谷歌访问者会更容易找到答案。为什么不注意并坚持
date
构造函数可以理解的日期格式呢?如中所述,通过规范保证理解?@FrédéricHamidi,因为它与旧浏览器不兼容(我与IE9有问题),或者对于这样一个简单的任务需要很大的编码开销。@MadaraUchiha done:)可能有用:请记住这个月。(0~11对1~12)