我的服务返回的日期为 7/14/2016 2:40 AM +00:00
。如何在 JS 中将其转换为 UTC?
尝试过:
new Date("7/14/2016 2:40 AM +00:00").toISOString();
在数据库中,日期已存储为 UTC,因此当我显示日期时,我希望将其显示为本地时间。
最佳答案
有多种方法可以解析字符串以生成 Date
对象。
一种方法是使用
Date
对象本身,将字符串传递给构造函数,或使用Date.parse
。然而,ECMAScript 规范中只需要 ISO8601 格式。任何其他输入都是特定于实现的,并且可能会也可能不会被不同的 JavaScript 运行时识别。特别是对于网络浏览器,不同浏览器支持的格式存在许多差异。此外,环境的区域设置也会影响值的解析方式。
1/2/2016
应该如何解析? 1月2日还是2月1日?您展示了7/14/2016
的示例,如果在英国运行(例如),该示例将是无效输入,其中日期格式为DD/MM/YYYY
.您可以编写自定义代码将字符串拆分为多个部分,单独解析每个部分,然后组合结果。这种方法的主要问题是代码往往很僵化,有时甚至很脆弱。它应该经过充分的测试,并且需要考虑许多边缘情况。
您可以使用库,这是迄今为止最简单、最灵活的方法(恕我直言)。有了一个好的库,您可以从其他人的共享经验以及(希望)您选择的库的一部分的单元测试中获得安慰。当然,使用库需要一些权衡,包括增加文件大小和放弃某种程度的控制。您应该仔细评估这些权衡。
有许多可用于 JavaScript 的日期库。最受欢迎的可能是moment.js ,尽管还有其他可供选择,并且一些较大的框架有时已经包含类似的功能。
这是一个使用 moment.js 的示例:
var i = "7/14/2016 2:40 AM +00:00"; var f = "M/D/YYYY h:mm A Z"; var m = moment(i, f); var o = m.format(f); // will be in the local time, in the same format as the input var d = m.toDate(); // if you really want a Date object
关于javascript - JavaScript 中的字符串到日期转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38383730/