多时区会议时间排期

拖一条滑杆,同时看几个城市各自是几点、谁在深夜。所有城市都在工作时段内的整点会自动列出来。

滑杆按 15 分钟一档,单位是参考时区的当地时间。工作时段默认 9:00 到 18:00,可以按自己团队的作息改;睡眠时段固定为 23:00 到次日 6:00。

先选一个会议日期

使用说明

所有换算都交给 Intl.DateTimeFormat 和标准 IANA 时区名,夏令时规则由浏览器的时区数据库负责,代码里没有一条手写的切换规则。这意味着只要时区名写对,历史上和当年的夏令时都能正确处理;代价是不同浏览器、不同系统版本携带的数据库新旧略有差别,遇到刚调整过夏令时政策的国家,结论以数据库较新的那个为准。时区名必须用标准写法,Asia/Kolkata 这类别名也认,Asia/Beijing 这种不存在的名字会被标出来并跳过。

什么时候「大家都不在深夜」是做不到的,可以用两个数快速判断:把同一时刻各地 UTC 偏移的最大值减最小值,得到城市间的时差跨度;再拿工作时段的小时宽度(默认 18 减 9 等于 9 小时)去比。跨度不小于宽度时,无论会议放在哪个整点,两端城市之间必然有一端落在工作时段之外,这是数学上的无解,而不是搜索没找到。结果区会把这两个数都列出来,选择城市组合之前先看一眼,能省很多来回试。

有解的时候,推荐会列出参考时区里所有满足「每个城市都在工作时段内」的整点,点一下就能把滑杆对过去。无解的时候给的是「最少牺牲」方案:先让人不在工作时段内的城市数最少,若仍并列,再选落在 22 点之后或 7 点之前城市数最少的那个,同分取更早的整点。被牺牲的城市和它们的当地时间会单独列出来,可以看到具体是谁要在几点上线。

日期不能随便填,因为夏令时会让某些城市对的时差在一年里变化。伦敦与纽约在冬季相差 5 小时、夏季相差 4 小时;纽约与圣保罗更极端,两边夏令时的起止日期不同,一年里有好几段时差在两个值之间切换。所以排会前把日期选成真实的会议日期,1 月和 7 月的结果可能完全不同。表格里的「夏令时」一列是通过比较该年 1 月和 7 月的偏移得出的:两个偏移不同说明该地实行夏令时,当前偏移等于其中较大的那个就说明此刻正处于夏令时。

时段判定只看当地的小时数:落在工作时段(默认 9:00 到 18:00,可改)算工作,23:00 到次日 6:00 算深夜,其余算非工作;不区分工作日和周末,也不考虑各地的法定节假日。表格里同时给出每个城市的日期和星期几,跨日期交界的地方会标「前一天」「次日」,避免把会议约到错误的日子。滑杆按 15 分钟一档,推荐只在整点上搜索,半点需要自己拖。

全部计算在浏览器本机完成,不联网也不上传任何内容。想先看各地此刻的时间和时差,用世界时间对照;要按两个具体时区精确换算某个时刻,用时区转换;要在时间点上加减若干小时看结果,用时间加减;要把会议按工作日排进日程,用工作日计算。

常见问题

为什么同一个城市对,时差在不同月份会差一小时?

因为夏令时。伦敦和纽约在冬季相差 5 小时,进入夏令时后两边同时拨快一小时,差值变成 4 小时;而伦敦和北京之间始终相差 8 小时或 7 小时,取决于伦敦是否在夏令时。所以排会前一定要把日期选成真实的会议日期,选 1 月和选 7 月,推荐结果可能完全不同。

推荐说「不可能让所有人都在工作时段」,是怎么算的?

比较两个数:同一时刻各地 UTC 偏移的最大差值(时差跨度),和工作时段的小时宽度(默认 9 小时)。如果跨度不小于宽度,无论把整点放在哪里,两端城市之间至少有一头要落在工作时段之外,数学上就无解。这个数字会直接显示在结果里,不是含糊的「可能不太合适」。

推荐结果里怎么没有半小时的候选?

推荐只在整点上搜索,候选是参考时区的 0 点到 23 点。如果想看 :30 这种半点,直接拖滑杆(滑杆按 15 分钟一档),下面的表格会实时显示各地时间,自己找一个能接受的即可。

「牺牲最小」是按什么标准排的?

两级排序:先让人不在工作时段的城市数最少,再在同样多人的候选里,选落在 22 点之后或 7 点之前的城市最少的那一个。同分时取更早的整点。所以它给的是「被牺牲的人最少、而且牺牲得最不狠」的时间,但仍可能有人要在深夜上线。

为什么没有考虑周末?

这一页只管一天里的时间点,不判断是不是周末或节假日。判断依据只有当地的小时数:在设定的工作时段内算工作,23 点到次日 6 点算睡眠。所以要排在周六,表格里照样会显示「工作时段」,需要自己看星期几那一列确认。

夏令时规则需要手动填吗?

不用。换算用的是浏览器的时区数据库,只要时区名是标准的 IANA 名(例如 Europe/London、America/New_York),历史上和当年的夏令时切换都由运行时负责,代码里没有一条手写的夏令时规则。代价是不同浏览器和系统版本的数据库新旧可能略有差别,刚改过夏令时规则的国家以最新版本为准。

我可以加自己的城市吗?

可以。城市列表里每一行的名字和时区名都能直接改,也能从一个包含北京、上海、东京、首尔、新加坡、悉尼、迪拜、伦敦、巴黎、柏林、纽约、洛杉矶、圣保罗的预设里添加。时区名要写标准写法,例如 Asia/Kolkata、America/Sao_Paulo,写错的话这一行会被标出来并且不参与计算。

输出的那段会议文本怎么用?

它按「城市名 + 时间 + 星期几 + 当地时间」拼成一行,可以直接贴进邮件或群公告,避免各地同事对同一个时刻产生歧义。因为一天之内可能跨日期,文本里的星期几是按各城市当地算的,例如北京周三 10 点对应纽约周二 22 点,两个星期几不同是正常的。