寻找跨时区的兼容时间

问题描述 投票:1回答:2

我正在制作锦标赛功能,参赛者可以提供时区和12小时优先选择的窗口。鉴于时钟为0-24,任何两个12小时的窗口至少会触及两端。考虑到这些范围相关的范围和UTC偏移,我坚持如何确定可行时间。

例:

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

如何从双方球员的角度找到最佳的比赛时间?在一个完美的场景中,这将是每个球员范围中间的正方形,但显然在大多数情况下这是不可能实现的。

javascript time
2个回答
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]数组。

我已经对你如何在这里存储时间数据做了一些假设,但你应该能够适应它。


-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());
© www.soinside.com 2019 - 2024. All rights reserved.