我正在使用以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
谢谢!
答案 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')