【问题标题】:Moment.Js: Offsetting dates using UTC and Timezone offsetMoment.Js:使用 UTC 和时区偏移量偏移日期
【发布时间】:2014-02-04 08:02:45
【问题描述】:

我正在尝试使用时区偏移量和 UTC 时间戳来调整时间。

我正在运行以下代码:

var date = {
    utc: '2013-10-16T21:31:51',
    offset: -480
}

var returnDate = moment(date.utc).utc().zone(date.offset).format('MM/DD/YYYY h:mm A');

我期待的是:10/16/2013 1:31 PM 但我最终得到的是10/17/2013 9:31 AM

【问题讨论】:

  • 如果删除.utc().zone(date.offset),日期会是什么样子?这样一来,您只需拨打 .format() 就可以了。
  • 另外,如果查看文档here 并向下滚动一点。上面写着:“除非您指定时区偏移量,否则解析字符串将在当前时区创建一个日期。”
  • 我发布了错误的数据,让我更正一下。秒
  • 看起来像这样:2013 年 10 月 16 日晚上 9:31,moment(date.utc).format('MM/DD/YYYY h:mm A');
  • 正在运行的服务器的当前时区是什么?如果它不是UTC,你已经传入了一个UTC日期,然后在上面调用.utc(),这进一步推进了时间。

标签: javascript date time momentjs


【解决方案1】:

我使用jsTimezoneDetect 库来确定时区名称而不是偏移量。

然后在 UTC 时间戳上使用它:

timestamp = moment.tz(timestamp, tz.name());
timestamp.format('MM/DD/YYYY h:mm A');

【讨论】:

    【解决方案2】:

    这对我有用:

    var date = {
      utc: '2013-10-16T21:31:51',
      offset: 480
    }
    
    var returnDate = moment.utc(date.utc).zone(date.offset).format('MM/DD/YYYY h:mm A');
    

    如果您注意到,我将偏移量更改为正数。这给出了预期的结果。如果偏移量保留在-480,则输出为10/17/2013 5:31 AM

    有一个 moment#UTC 方法将日期初始化为 UTC 与本地时间。

    【讨论】:

    • 对于其他人在这篇文章中的绊脚石,您可以为offset 使用一个可能更清晰的字符串:zone('-07:00')(PST 示例)
    • moment.zone() 在 2.9.0 之后被弃用
    • 方法 zone() 已弃用,大家应该改用 utcOffset() 看这里github.com/moment/moment/issues/1779
    猜你喜欢
    • 1970-01-01
    • 2012-08-02
    • 2017-10-18
    • 2015-02-14
    • 1970-01-01
    • 2013-01-14
    • 2017-02-21
    • 1970-01-01
    相关资源
    最近更新 更多