代码之家  ›  专栏  ›  技术社区  ›  Rolando

如何使用momentjs将GMT/UTC转换为当地时间并返回?

  •  0
  • Rolando  · 技术社区  · 8 年前

    我有以下字符串:

    “2018年12月25日01:02:20”

    我希望这是GMT/UTC使用的时刻。js,如何将其转换为当地时间并返回UTC?

    当我这样做时:

    moment(myDateString).local()
    

    然后稍后尝试转换回:

    moment(myDateStrig).utc()
    

    它们都产生不同的结果。如何将时间从UTC转换为本地时间,然后再转换回UTC?

    注: 当我尝试 .utc() 字符串上的函数 "December 25, 2018 01:02:20" 我有一个不同的时间。当我做 .local() 在utc转换的时刻,我得到了一个不同的日期,而不是我的原始日期 “2018年12月25日01:02:20” .

    如果可以的话,请举一个例子。看起来我有3个不同的日期。

    2 回复  |  直到 8 年前
        1
  •  1
  •   VincenzoC    8 年前

    由于您的输入代表UTC时间,因此必须使用 moment.utc (其他人在评论中建议):

    默认情况下,力矩以本地时间进行分析和显示。

    如果要以UTC格式解析或显示某个时刻,可以使用 moment.utc() 而不是 moment() .

    此外,由于您的输入字符串的格式不是 moment(String) (ISO 8601或RFC 2822),必须将format参数作为 片刻utc公司 看见 String + Format parsing 文件的第节。

    下面是一个代码示例:

    var input = "December 25, 2018 01:02:20";
    var fmt = 'MMMM DD, YYYY HH:mm:ss';
    var m = moment.utc(input, fmt);
    console.log(m.local().format(fmt));
    console.log(m.utc().format(fmt));
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.21.0/moment.min.js"></script>
        2
  •  0
  •   laptou    8 年前

    要解释诸如“2018年12月25日01:02:20”之类没有时区的字符串,可以调用 moment() 它将解释为当地时间,或者您可以调用 moment.utc() 将其解释为UTC时间。

    尝试以下操作:

    const myUtcMoment = moment.utc(myDateString)
    

    这将导致 Moment 对象,表示UTC时区中2018年12月25日凌晨01:02:20。

    为了转换 片刻 到当地时间,您可以执行以下操作:

    const myLocalMoment = myUtcMoment.local()
    

    要将其转换回来,您可以调用 myLocalMoment.utc() .

    顺便说一句,对于这种日期格式,还不清楚这是否是24小时制。那一刻。js文档 recommend specifying a format 为了减轻歧义。

    推荐文章