【问题标题】:MomentJS and days differenceMomentJS 和天的区别
【发布时间】:2020-09-07 23:06:14
【问题描述】:

我的时区是 GMT+2。
当当地时间'2020-05-21 01:00'
这应该意味着 UTC 时区 (GMT+0) 中的“2020-05-20 23:00”

所以天差应该说:1
此代码不会给出该结果。有人知道为什么吗?

编辑:简单地说:我所在的星期六凌晨 1 点是 UTC 时间星期五晚上 11 点。所以应该有1天的差异。这是实时代码示例

https://stackblitz.com/edit/moment-js-playground-vteexd?embed=1&file=index.ts

【问题讨论】:

  • 请在此处发布代码。 diff 会截断小数部分,因此如果差值小于 1,则结果为 0。
  • 获取时间戳值表明它们在内部是相同的日期。确实.diff()接受了第三个布尔参数,输出小数,但结果还是0。
  • 代码在stackblitz中
  • 顺便说一句,2020-05-21 01:00 +02:00 和 2020-05-20 23:00 Z 之间的差异为零,它们是同一时刻。
  • 我投票结束这个问题,因为这个问题是由对日期和 diff 函数的误解引起的。

标签: javascript datetime timezone momentjs datediff


【解决方案1】:

在这里,我将解决我自己的问题:

 import moment from "moment-timezone";

//test for GMT+1
var now = moment().startOf("day").add(1, "hours");
console.log(now.format(), " now", now.format('dddd'));

let res= GetDayOffsetUTC(now);
console.log("Day diff: ", res);

// Get DAY difference between local and UTC time
// Responses:
// -1 : your local time is 1 day ahead of UTC
//  1 : your local time is 1 day after UTC
//  0 : your local time is same day as UTC



   function GetDayOffsetUTC(date) {
      const utcOffset = date.utcOffset();

      const utc = date.clone().add(-utcOffset, "minutes");

      const dayDiff = utc.startOf("day").diff(date.startOf("day"), "days");
      return dayDiff;
    }

【讨论】:

  • 您可以通过比较相同格式(例如 ISO 8601)的本地日期和 UTC 日期来更简单地做到这一点,如果它们不同,则差异为 1 天。或者您可以查看一天中的当地时间是否小于午夜的偏移量(这是您实际检测到的时间)。
【解决方案2】:

在内部它们是相同的日期。为了证明这一点,请尝试比较他们的时间戳now.format('X') === utc.format('X')

作为一种解决方案,我建议使用moment durations 来测量时差,并使用.days() 来获得所需的值。

This could be of help.

【讨论】:

  • 这给出了想法,但没有解决方案。简单地说:我所在的星期六凌晨 1 点是 UTC 时间星期五晚上 11 点。所以应该有1天的差异。如何计算?
  • @Jalle——这是对日期差异的非常规解释。它们是同一时刻,那么它们怎么可能相差 1 天呢?日期对象只是一个时间值,如果在某个时区表示的日期 d 是在不同时区表示的同一日期的前一天,则需要d - d === 1 day。你能看出其中的问题吗?请注意,日期实例没有任何与之关联的时区信息,它们只是一个时间值。
  • 检查我的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-28
  • 1970-01-01
  • 2013-01-06
  • 1970-01-01
  • 2013-04-17
相关资源
最近更新 更多