【问题标题】:Moment Js from UTC timeUTC时间的时刻Js
【发布时间】:2018-11-17 00:08:05
【问题描述】:

我想计算与 UTC 时间的相对时间。我的当地时间是 +2。

我尝试了很多组合... 例如

const endDate = new Date("08 Jun 2018") // tomorrow's date, I am expecting the time is 00:00:00
const utcDateTime = new Date(moment.utc().format());
const format = 'YYYY-MM-DD HH:mm:ss';

console.log(moment(endDate).fromNow()) // example for Poland(+2) it is 12, but I want to UTC(0), so it is should be 14
console.log(moment(endDate).from(utcDateTime)) // the same
console.log(moment(endDate.toUTCString()).from(utcDateTime)) // the same
console.log(moment(moment(endDate).utc().format(format), format).fromNow()) // I do not why, but it is 10, not 14 
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.1/moment.min.js
"></script>

每次我得到相对时间,这对于我的当地时间是正确的。 UTC 应该大 2 小时。

我不知道该怎么做...

有人可以帮我吗?

谢谢!

编辑

根据@31piy 的建议,我尝试过类似的方法。

const endDate = new Date("08 Jun 2018") // tomorrow's date, I am expecting the time is 00:00:00
const format = 'YYYY-MM-DD HH:mm:ss';

console.log(moment(endDate).from(moment(moment.utc().format(format), format)))
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.1/moment.min.js
"></script>

它对我有用,但是......我怎样才能更清楚地做到这一点?有可能吗?

EDIT2

这是我的错...我将一个位于 UTC 时区的日期(“2018 年 6 月 8 日”)传递给 Date 构造函数,但我没有指定它是 UTC - 所以实际上 endDate 应该是相等的到"08 June 2018 02:00:00",而不是"08 Jun 2018 00:00:00"。我解决了这个问题,非常清楚 moment(endDate).fromNow(true) 正在为我工​​作。

感谢您帮助我!

【问题讨论】:

  • 这个话题的答案对我没有帮助......事实上,我认为问题在于,我不想改变“endDate”,但我想改变“now”的值。它应该是 UTC(对我来说是本地 2),但它是从本地计算相对时间。但是,从 UTC 日期开始,它也无法正常工作,我不知道该怎么做。

标签: javascript timezone momentjs utc


【解决方案1】:

不要使用Date 构造函数进行解析。您已经在使用 Moment,所以让它发挥作用吧。

moment.utc("08 Jun 2018", "DD MMM YYYY").fromNow()

【讨论】:

    【解决方案2】:

    这是我的错...我将一个位于 UTC 时区的日期(“2018 年 6 月 8 日”)传递给 Date 构造函数,但我没有指定它是 UTC - 所以实际上 endDate 应该是相等的到"08 June 2018 02:00:00",而不是"08 Jun 2018 00:00:00"。我解决了这个问题,并且非常清楚 moment(endDate).fromNow(true) 正在为我工​​作。

    【讨论】:

      【解决方案3】:

      您要实现的目标有点棘手。您需要在没有时区信息的情况下格式化 UTC 时间,然后在调用 fromNow() 之前再次使用时刻解析它:

      const format = 'YYYY-MM-DD HH:mm:ss';
      console.log(moment(moment.utc().format(format), format).fromNow());
      <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.1/moment.min.js
      "></script>

      【讨论】:

      • 我已经更新了我的问题。我正在尝试您的建议,但在那之后,我得到了 (local+2) 时间,而不是 (local-2,应该是 UTC) 时间
      • 我再次更新了我的问题。根据您的建议,我已经做了一些事情,这是有效的......但我可以更清楚地做到这一点吗?
      猜你喜欢
      • 2015-12-09
      • 2014-09-26
      • 1970-01-01
      • 2016-07-12
      • 1970-01-01
      • 1970-01-01
      • 2018-08-21
      • 1970-01-01
      • 2021-03-09
      相关资源
      最近更新 更多