在JavaScript中创建新的日期(字符串)时,我一直在处理这个烦人的错误。我的问题是,是否有人为这个问题找到了更好/更标准化的解决方案,适用于大多数浏览器?例如,我发现IE9不喜欢.sss(毫秒),然后Firefox无法正常使用欧洲日期格式(DD-MM-YYYY)。
让我知道你的想法!
答案 0 :(得分:1)
根据MDN:
注意:由于浏览器差异和不一致,强烈建议不要使用Date构造函数(和Date.parse,它们是等效的)解析日期字符串。对RFC 2822格式字符串的支持仅限于惯例。对ISO 8601格式的支持不同之处在于,仅限日期的字符串(例如" 1970-01-01")被视为UTC,而不是本地。
同样适用于Date.parse()
。如果您担心这种不一致(因为您的浏览器支持非常广泛,或者因为您处理来自外部源的数据),您始终可以使用完整的构造函数:
new Date(year, month, [day, hour, minute, second, millisecond])
括号内的参数是可选的。如果你可以使用可靠的工具解析日期(例如moment.js
,如你所提到的那样),那么你可以使用它来构建一个没有危险的本地Date
。
这很麻烦,但把它打包成一个函数,再也不用看了。
答案 1 :(得分:1)
我发现适用于大多数浏览器的字符串格式如下。
stringFormat = moment(dateObject).format("YYYY-MM-DDTHH:mm:ss");
date = new Date(stringFormat);
我使用moment.js提供更进一步的兼容性,到目前为止,这适用于IE9 +,Chrome和Firefox。但是在SOF中带了我很多论坛和其他回复来找到一个好的解决方案。
最大的问题是兼容旧浏览器,语言环境格式等。例如this one几乎是正确的,但我发现IE9不喜欢.sss(毫秒)并且无法正常工作。 Firefox也有欧洲日期格式的错误。
有没有人有更好的方法来解决这个问题? 请分享知识! :)