我正在使用以 OData v4 格式返回日期/时间的 Web 服务。该格式如下所示:yyyy-MM-ddTHH:mm:ss.fffZ
。这意味着当前时间将返回为:“2016-05-11T03:08:00Z”。
我在一些客户端 JavaScript 中收到了这个日期。我正在尝试使用 Moment.js 格式化日期图书馆。据我了解,该库寻找 ISO 8601 formatted string .
我的问题是,如何将获得的 OData v4 字符串转换为 ISO 8601 格式的字符串?或者,如何将 OData v4 字符串加载到 moment
对象中?我最大的问题似乎是时区。例如:如果我有
2016-06-01T00:00:00Z
然后使用
moment('2016-06-01T00:00:00Z').format('MM/DD/YYYY')
我明白了
05/31/2016
然而,我被期望 06-01-2016
谢谢!
最佳答案
如果您只想将此 UTC 日期解释为本地时间,则无需引入 Moment 时区。只需忽略 z
标记。
moment('2016-06-01T00:00:00Z', 'YYYY-MM-DDTHH:mm:ss').format()
"2016-06-01T00:00:00-05:00" //interpreted as -5 because my browser is central
请注意,Intl.DateTimeFormat()
的浏览器支持非常有限:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat/resolvedOptions
如果出于某种目的确实需要来自浏览器的时区信息(请记住,如果您只是指浏览器的本地时间,则不需要此信息),您可以使用 moment.tz.guess( )
。如果存在,这将使用国际 API,如果不存在,则退回到启发式猜测时区。 http://momentjs.com/timezone/docs/#/using-timezones/guessing-user-timezone/
作为衡量标准,如果您希望将该日期解释为 UTC 并将其显示为 UTC,您可以使用 utc 函数:
moment.utc('2016-06-01T00:00:00Z').format()
"2016-06-01T00:00:00Z" //z for UTC, but displayed with expected date and time
关于javascript - 在 JavaScript 中转换日期/时间格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37172415/