寻找跨时区的兼容时间

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了寻找跨时区的兼容时间相关的知识,希望对你有一定的参考价值。

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

例:

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

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

答案

最容易理解的方法是弄清楚每个玩家的范围在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]数组。

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

另一答案

我想你需要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());

以上是关于寻找跨时区的兼容时间的主要内容,如果未能解决你的问题,请参考以下文章

是否有跨浏览器、向后兼容的方式来编码背景渐变?

Datax跨时区

Datax跨时区

W3C 验证的 CSS 是不是自动意味着跨浏览器兼容性?

获取用户时区相关日期[重复]

javascript+php实现根据用户时区显示当地时间的方法