【问题标题】:How to convert from GMT/UTC to local time and back using momentjs?如何使用 momentjs 从 GMT/UTC 转换为本地时间并返回?
【发布时间】:2026-01-30 17:15:01
【问题描述】:

我有以下字符串:

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

我打算将其设为 GMT/UTC 使用 moment.js,如何将其转换为本地时间并返回 UTC?

当我这样做时:

moment(myDateString).local()

然后再尝试转换回来:

moment(myDateStrig).utc()

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

注意: 当我在字符串"December 25, 2018 01:02:20" 上尝试.utc() 函数时,我得到了不同的时间。当我在 UTC 转换时刻执行 .local() 时,我得到一个不同的日期,这不是我原来的日期 "December 25, 2018 01:02:20"

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

【问题讨论】:

  • "December 25, 2018 01:02:20" 没有时区,所以会被解释为当地时间。然后,调用 utc() 会将其转换为 UTC 时间。
  • 我看过这些,但它们似乎与我的问题不符。请注意我正在使用的日期字符串...“December 25, 2018 01:02:20”。当我执行 utc() 时,它会将其更改为其他内容。当我使用 .local() 时,它与“2018 年 12 月 25 日 01:02:20”不匹配
  • 你应该寻找这个*.com/questions/33321495/…

标签: javascript momentjs


【解决方案1】:

由于您的输入代表 UTC 时间,因此您必须使用 moment.utc(正如 cmets 中其他人所建议的那样):

默认情况下,moment 解析并显示为当地时间。

如果您想以 UTC 解析或显示时刻,可以使用 moment.utc() 而不是 moment()

此外,由于您的输入字符串不是moment(String)(ISO 8601 或 RFC 2822)识别的格式,您必须将格式参数作为moment.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】:

    为了解释诸如“December 25, 2018 01:02:20”之类没有时区的字符串,您可以在其上调用moment(),它会将其解释为当地时间,或者你可以在上面调用moment.utc(),它会将其解释为UTC时间。

    试试这个:

    const myUtcMoment = moment.utc(myDateString)
    

    这应该会产生一个Moment 对象,该对象代表 UTC 时区 2018 年 12 月 25 日凌晨 01:02:20。

    要将Moment 转换为当地时间,您可以这样做:

    const myLocalMoment = myUtcMoment.local()
    

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

    顺便说一下,对于这种日期格式,它是否是 24 小时制并不清楚。 Moment.js 文档recommend specifying a format 以减少歧义。

    【讨论】:

    • 问题是当我在 myUtcMoment 和 myLocalMoment 上执行 .format() 以使其看起来像原来的样子时,我无法让它看起来像这样:“”2018 年 12 月 25 日 01: 02:20" 看起来是在不同的日期/时间!
    • @Rolando 你能举个例子来说明它的样子吗?
    最近更新 更多