查找跨时区的兼容时间

时间:2019-02-14 00:45:51

标签: javascript time

我正在研究一项比赛功能,参赛者提供一个时区和一个他们喜欢玩的首选12小时窗口。假设时钟为0-24,则任何两个12小时的窗口至少将在末端接触。在给定范围和与这些范围相关的UTC偏移量的情况下,我坚持如何确定可行的时间。

示例:

  • 玩家A -偏移:UTC + 2-范围:0:00-12:00
  • 播放器B -偏移:UTC-3-范围:9:00-21:00

如何从双方球员的角度找到比赛的最佳时间 ?在理想情况下,这应该在每个玩家范围的中间处于正方形,但是显然在大多数情况下这是无法实现的。

2 个答案:

答案 0 :(得分:1)

最容易理解的方法是找出每个玩家的时间在UTC中的时间,找到重叠部分,然后将其转换回玩家的时区。

const players = [
  {
    offset: 2,
    start: 0,
    end: 12
  },
  {
    offset: -3
    start: 9,
    end: 21
  }
];

players.forEach(p => {
  p.rangeUtc = [p.start + p.offset, p.end + p.offset];
});

const overlapUtc = [Math.max(...players.map(p => p.rangeUtc[0])),
                    Math.min(...players.map(p => p.rangeUtc[1]))];

players.forEach(p => {
  p.overlapLocal = [overlapUtc[0] - p.offset, overlapUtc[1] - p.offset];
});

现在剩下的是球员的重叠时间,这些时间在他们各自的时区中存储为[startHour, endHour]数组,分别位于各自的球员对象中。

我已经对您如何在此处存储时间数据做出了一些假设,但是您应该能够进行调整。

答案 1 :(得分:-4)

我认为您需要Date()命令:

var date = new Date();
console.log("the date is: " + date.now.getDate());
console.log("the year is: " + date.now.getYear());
console.log("the time is: " + date.now.getTime());
console.log("the utc date is: " + date.now.getUTCDate());