【问题标题】:MomentJS is comparing dates differently on the serverMomentJS 在服务器上以不同方式比较日期
【发布时间】:2016-11-04 01:09:55
【问题描述】:

我想按天对事件进行分组。在开发环境(巴西)中,它正确地进行了分组,但在服务器(美国)上却不是。它将一天结束时发生的事件放在第二天开始。我想这与时区有关。

活动日期格式如下:

2016-11-03T18:00:00-0200

下面是我的代码,我尝试了一些方法来解决这个问题,但不能。我使用MomentJS 处理日期。事件必须按天分组,无论时区、偏移量或其他任何内容。

const events = [];
_.forEach(ungroupedEvents, event => {
    const date = moment(event.start_time, moment.ISO_8601);
    const period = _.find(events, period => date.isSame(period.date, 'day'));
    if (period) {
        period.events.push(event);
    } else {
        events.push({
            date: date.format('L'),
            events: [event]
        });
    }
});

我怎样才能做到这一点?我一整天都没有任何进展。 :(

【问题讨论】:

  • “事件必须按天分组,无论时区、偏移量或其他任何内容。” - 您的意思是要忽略时区,以便 2016-01-01T23:00:00(2016 年 1 月 1 日,UTC 时间晚上 11 点)和 2016-01-01T23:00:00-0200(2016 年 1 月 1 日,UTC 时间晚上 11 点) -2 时间,但实际上 2016 年 1 月 2 日凌晨 1 点 UTC 时间)被视为同一时间?从技术上讲,它们不是同一时间(后者比前者晚两个小时,因此过了午夜并落在第二天)。
  • 如何根据特定时区制作它?
  • 如果您希望忽略时区,那么您必须选择一个用于所有内容,例如格林威治标准时间。对于时区 -0200 中的时间,00:00 到 03:00 之间的任何时间将是在时区 -0500(美国东海岸,又名 EST)中的晚上 9 点到前一天午夜之间。

标签: javascript node.js date timezone momentjs


【解决方案1】:

您可以尝试使用moment-timezone,并在每个步骤中验证日期格式是否为 UTC,并针对正确的时区 (UTC/GMT) 正确输入/输出。

或者,我认为这是最好的,使用 getTime() 获取自纪元以来的 MS,使用该大数字存储和分组(您可以使用 mod % 获取自纪元以来的日期)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-08
    • 1970-01-01
    • 1970-01-01
    • 2017-10-01
    • 1970-01-01
    • 2015-05-12
    相关资源
    最近更新 更多