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

时间:2016-05-11 20:12:23

标签: javascript momentjs

我正在使用以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

谢谢!

2 个答案:

答案 0 :(得分:2)

如果您要做的只是将此UTC日期解释为当地时间,则无需引入时刻时区。只需忽略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

答案 1 :(得分:1)

您必须通过添加时区偏移来手动处理,或者如果您可以添加另一个依赖项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')