【问题标题】:Changing the Utc Date to Local Date using moment.js使用 moment.js 将 Utc 日期更改为本地日期
【发布时间】:2013-10-24 10:48:00
【问题描述】:

我正在使用带有时区的 moment.js 在 web 应用程序中进行日期操作。我将所有日期存储在 UTC 中,并将它们作为 UTC 返回给 UI。我有用户的时区。我想将 UTC 时间转换为本地用户时区。

var timezone = "America/New_York";
var utcDate = "2013-10-16T10:31:59.0537721Z";

var localDate = moment(utcDate).utc().tz(timezone).format()

当我尝试这样做时,我的时间不对。不知道如何让它与时刻一起工作

【问题讨论】:

    标签: javascript date datetime timezone momentjs


    【解决方案1】:

    即使你不知道时区,你也可以获得客户端偏移量并像这样使用,

    let utcTime = "2017-02-02 08:00:13.567";
    var offset = moment().utcOffset();
    var localText = moment.utc(utcTime).utcOffset(offset).format("L LT");
    

    试试这个JsFiddle

    【讨论】:

      【解决方案2】:

      对于任何有同样问题的人:

      您的日期 iso 格式应包含时区。这是 momentjs 允许的格式:

      YYYY-MMM-DDTHH:mm:ss+00:00
      

      注意 +00:00 表示它是 UTC

      例子

      moment('2014-10-03T09:31:18+00:00').format()
      

      会转身

      "2014-10-03T17:31:18+08:00"
      

      【讨论】:

        【解决方案3】:

        使用+操作符获取unix时间,那么:

        moment(+moment.utc(utcDate))
        

        它是如何工作的:

        • moment.utc(String) 解析字符串并返回一个设置为 UTC 时区的时刻对象。
        • + 返回当前对象的 unix 偏移量(以毫秒为单位)
        • moment(Number) 使用传入的 unix 偏移量在用户的本地时区创建一个新的时刻对象。

        【讨论】:

        • 我赞成这个答案,因为在没有说明原因的情况下反对是没有用的。
        【解决方案4】:

        你可以试试:

        moment.utc(utcDate).tz(timezone).format()
        

        但这应该没关系。他们都应该产生:"2013-10-16T06:31:59-04:00"。

        它适用于我,在 Chrome 30 上运行,所以它可能与浏览器相关。

        如果您在 IE8 上运行 Moment.js 2.3.1 或更早版本,则这是问题 #1175 的副作用,该问题已在 2.4.0 中修复。更新到最新版本应该可以解决问题。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-03-26
          • 2014-06-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-05-07
          • 2018-09-21
          • 2017-09-15
          相关资源
          最近更新 更多