鉴于当前UTC时间和一天中的特定时间,我想找到以分钟为单位的时区偏移量。以下功能在小时为午夜的所有时区都有效(我认为)(不包括从30和45分钟开始的几个时区,但如果每小时运行一次,则仍在时区范围内)。
function getCurrentGlobalTimeOffset(currentGlobalTime) {
var currentGlobalHour = dateFormat(currentGlobalTime, 'H');
if (currentGlobalHour <= 11) {
var currentGlobalOffsetStart = currentGlobalHour * 60;
var currentGlobalOffsetEnd = (currentGlobalHour * 60) + 60;
} else {
var currentGlobalOffsetStart = (24 - currentGlobalHour) * -60;
var currentGlobalOffsetEnd = ((24 - currentGlobalHour) * -60) + 60;
}
return {
start: currentGlobalOffsetStart,
end: currentGlobalOffsetEnd
}
}
我正在努力弄清楚如何结合特定的时间。例如,如果我想获取太平洋时间上午9:00的时区偏移量,则在2019-02-23T17:00:00.000Z
UTC时间的预期结果将是:
{
start: 480,
end: 540
}
我也试图找到一个可以做到这一点的图书馆,但是我没有任何运气。据我所知moment.js
没有提供此功能。
完成此任务的最佳方法是什么?
答案 0 :(得分:1)
不可能以100%的信心完成结果,这就是为什么您无法在Moment.js或其他库中找到用于此目的的函数的原因。原因是当前世界的时区偏移量在UTC-12到UTC + 14的范围内,因此在这种功能会产生歧义的地方存在重叠。
以2019-02-23T20:00:00Z
(UTC)为例。这就是2019-02-23T09:00:00-11:00
(在美属萨摩亚)和2019-02-24T09:00:00+13:00
(在新西兰)(reference here)。因此,如果当前UTC小时为20
,给定的本地小时为9
,此函数应返回-11
还是+13
?
最好的方法是计算两个可能的偏移量,然后查看其中一个是否超出范围以排除它。或者,如果不关心使用整个世界的数据,则可以缩小范围,使其不会重叠。