javascript - date() 函数在 Safari 和 Firefox 中返回无效日期

标签 javascript firefox date datetime safari

我按以下方式格式化日期:

date = new Date("2013-05-12 20:00:00");
formattedDate = new Date(date.getFullYear(),date.getMonth(),date.getDate());

当我在 Chrome 中运行它时,它输出:

Sun May 12 2013 00:00:00 GMT-0700 (PDT)

这是我需要的,但是当我在 Firefox 或 Safari 中运行它时,我得到了

Invalid Date

任何人都可以为此提出解决方法。如果不需要库、正则表达式或字符串操作,则加分。

最佳答案

虽然值 2013-05-12 20:00:00ISO8601 指定的几种有效格式之一, 最好使用 RFC3339 中定义的配置文件,它是 ISO8601 的子集。

这意味着您应该同时拥有 T 分隔符和时区偏移量 - 可以是数字或 Z 以指定 UTC。换句话说,您应该使用类似 2013-05-12T20:00:00-07:00 的值,或等效的 2013-05-13T03:00:00Z .

现在无论您是否有正确格式化的输入值,都会出现浏览器兼容性问题。所有现代浏览器都支持 ISO8601,但有些浏览器对其的解释不同。例如,在 Google Chrome 中,如果您省略 T,即使末尾有 Z,它也会被解析为本地时间。在 Internet Explorer 中,省略 T 的相同值将返回无效日期错误。

更好的方法是使用一个库来抽象掉这些差异,这样您就可以专注于您的应用程序,而不是浏览器的怪癖。我所知道的最好的图书馆是 moment.js .除了完全支持 ISO 日期之外,您还可以使用自定义格式字符串以任何您想要的方式解析输入。它还具有许多其他功能。我强烈建议您看一看。

使用 moment.js ,您可以执行以下操作:

// from a full date-time-offset ISO8601/RFC3339 value
var m = moment('2013-05-12T20:00:00-07:00');

// or from your custom value, with explicit formatting
// this will assume the local time zone because you didn't specify one
var m = moment('2013-05-12 20:00:00','YYYY-MM-DD HH:mm:ss');

// then you can output it in a custom format if you like
m.format("dddd, MMMM Do YYYY, h:mm:ss a"); // "Sunday, May 12th 2013, 8:00:00 pm"

据我所知,moment.js适用于所有浏览器 - 包括 IE6 等较旧的浏览器。

关于javascript - date() 函数在 Safari 和 Firefox 中返回无效日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16616950/

相关文章:

javascript - "console.log("var : "+ var)"? 的简写

javascript - 尝试让 package.json knex 命令起作用

javascript - 如何使用 javascript 验证 html 5 输入类型日期?

date - 这是什么样的日期格式? 437432903.96807599067687988281

javascript - Chart.js 日期和时间条形图未渲染 - 但线条有效

javascript - 在angularjs中使用ng-if出错

javascript - 在不同域上动态加载样式表在 Firefox 中不起作用

javascript - 是否可以在 C# 中使用 selenium/webdriver 来测试 FireFox 中的文件拖放

Firefox-Portable 出现 Java Selenium 错误

Html 生日输入可用性最佳实践