【问题标题】:Moment.js Convert Local time to UTC time does workMoment.js 将本地时间转换为 UTC 时间确实有效
【发布时间】:2015-05-20 19:26:50
【问题描述】:

我想使用 Moment.js 将本地时间转换为等效的 UTC。我相信我有正确的方法,但它不会改变时间。

我在澳大利亚悉尼 +11,预计 UTC 时间会提前 11 小时。

在时刻对象内部,isUTC 标志从 false 变为 true,但时间不会改变,我是否打算为此使用不同的技术。

我如何真正从这个对象中获取当前的 UTC 日期

转换前

var val = '18/03/2015';
var selectedDate = moment(val, 'DD/MM/YYYY');

转换后

var a = selectedDate.utc()

【问题讨论】:

标签: javascript momentjs


【解决方案1】:

我刚刚尝试了这段代码,似乎我得到了正确的 UTC 时间。我想我只是想确认我正在做的是从 moment.js 访问 UTC 时间的正确方法

a.format("YYYY-MM-DD HH:mm:ssZ")

我发现我在应用程序中的使用模式不正确

selectedDate.utc().format(fullFormat)

应该是的

moment.utc(selectedDate).format(fullFormat)

【讨论】:

  • 最后一个代码 sn-p 是正确的。看看momentjs.com/docs/#/parsing/utc。为了进入 UTC 模式,您应该创建一个新的时刻。虽然在我自己的测试中,我似乎能够在现有时刻成功调用.utc(),所以谁知道呢。
  • 不是moment().utc(...,而是moment.utc(...,我猜:)
  • @medik 是对的,你应该使用moment.utc(datetime).format(MOMENT_UTC_DATE_TIME_FORMAT)
  • 如果 selectedDate 是以毫秒为单位的时间戳,它不起作用。为什么?
【解决方案2】:

这个问题很老,但我也遇到过。它可能对某人有用:

使用utcOffset()方法计算UTC时间:

selectedDate = (moment(selectedDate).add(-(moment().utcOffset()), 'm'));

并明确指定 UTC:

selectedDate = moment.parseZone(selectedDate).utc().format();

【讨论】:

  • 我认为我遇到了相反的问题......日期,在 JSON 中,是 utc 但被解释为本地,所以我不得不添加 utc 偏移量。但有一件事,我认为你真的想使用 selectedDate 来确定偏移量,因为它会改变......这是我的代码: constcorrectedDateTime = m.add((moment(utcDate).utcOffset()), 'm' );
【解决方案3】:

这对我有用!

selectedDate = moment(selectedDate).add(moment(selectedDate).utcOffset(), 'm').utc().format()

【讨论】:

  • 如果需要减去偏移量,这不起作用。
  • 它确实适用于减法情况,因为 utcOffset 在这种情况下返回负值
【解决方案4】:

从您的本地时间创建一个本地时刻对象并将其转换为 UTC,然后对其进行格式化,然后从该格式化的 UTC 字符串创建一个新的 UTC 时刻

var localDateString = '24/04/2019';
var localDateStringFormat = 'DD/MM/YYYY';

var utcMoment = moment.utc(moment(localDateString, localDateStringFormat ).utc().format('YYYY-MM-DD HH:mm:ssZ'))

console.log(utcMoment);
<script src="https://momentjs.com/downloads/moment.js"></script>

【讨论】:

    【解决方案5】:

    经过几个令人沮丧的小时后,我发现了问题所在

    简短回答:要将时间转换为 UTC,我们需要使用 format()

    长答案:举个例子

    moment.utc(1559586600000).format('LLL')

    .utc 将 isUTC 标志设置为 true。

    记录日期时,d 键始终显示本地时区的时间。 (这让我们相信它无法正常工作 - 如您的屏幕截图所示)

    但我们需要使用 .format 来获取 UTC 格式的日期/时间。

    以上代码返回June 3, 2019 6:30 PM,这是正确的UTC时间。

    【讨论】:

      【解决方案6】:

      这行得通

      moment(date_to_convert).utc().format("YYYY-MM-DD HH:mm:ss");
      

      【讨论】:

        【解决方案7】:

        这就是你使用moment-timezone的方法

        moment.tz(localDate, localTimeZone).utc()
        

        【讨论】:

          【解决方案8】:
          const moment = require('moment-timezone');
          const dateTime='2020-12-21'
          const timezone='America/Anchorage'
          const dateTimeInUtc = moment(dateTime).tz(timezone).utc().format();
          console.log('dateTimeInUtc',dateTimeInUtc);
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-07-27
            • 1970-01-01
            • 2021-07-21
            • 2016-05-24
            • 2015-08-27
            • 2020-04-28
            • 2014-07-18
            • 2021-02-04
            相关资源
            最近更新 更多