【问题标题】:Converting between date/time formats in JavaScript在 JavaScript 中转换日期/时间格式
【发布时间】:2016-05-11 20:12:23
【问题描述】:

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

谢谢!

【问题讨论】:

  • 你的时区是什么?

标签: javascript momentjs


【解决方案1】:

如果您只想将此 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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 不错。从来没有和Intl 在一起过。现在会。
    猜你喜欢
    • 1970-01-01
    • 2011-03-05
    • 2011-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多