在JavaScript中转换日期/时间格式

Converting between date/time formats in JavaScript

本文关键字:时间 格式 日期 转换 JavaScript      更新时间:2023-09-26

我正在使用一个以OData v4格式返回日期/时间的web服务。该格式如下所示:yyyy-MM-ddTHH:mm:ss.fffZ。这意味着当前时间将返回为:"2016-05-11T03:08:00Z"。

我在一些客户端JavaScript中收到了这个日期。我正在尝试使用Moment.js库格式化日期。根据我的理解,该库查找ISO 8601格式的字符串。

我的问题是,如何将我得到的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-时区/猜测用户时区/

为了更好地衡量,如果您希望将该日期解释为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

您必须通过添加时区偏移量手动处理,或者如果您可以添加另一个依赖项moment timezones js,那么您可以做一些事情。

var tz = Intl.DateTimeFormat().resolvedOptions().timeZone;
moment('2016-06-01T00:00:00Z').tz(tz).format('MM/DD/YYYY')

如果你知道你的时区,那么只需传递你的时区名称。

moment('2016-06-01T00:00:00Z').tz('America/New_York').format('MM/DD/YYYY')