鉴于我所做的以下假设(基于他的问题和评论中所写的内容)是正确的,这是针对 OP 特定情况的超级简单解决方案:
- 该图仅适用于一位客户
- 该图将主要在 Firefox 上加载(具有相同引用错误的版本)
- 客户的机器都基于 GMT(时钟改变时变为 BST)
- 机器时钟相当准确
- 客户不会随意更改机器的时钟。
如果上述情况属实(甚至可能不是全部),这将变得非常简单。因为你真的只担心两个时区,GMT 和 BST,你可以调整你的例子如下:
在加载时/图形初始化时添加这段代码:
// given a date object, returns the actual hour (works for GMT/BST only)
var getDisplayHour = (function() {
var initiallyGMT = (new Date().toString().indexOf('BST') === -1);
return function ( date ) {
var isGMT = (date.toString().indexOf('BST') === -1);
var offset = initiallyGMT - isGMT;
return date.getHours() + offset;
}
})();
将系统时钟设置为 12:00 并打开 Web 应用程序...
var currentDisplayHour = getDisplayHour( new Date() ); // returns 12
在不重新打开网络应用程序的情况下将系统时钟设置为 13:00。
// the referenced bug keeps the same time, but it successfully changes the time zone, so:
var currentDisplayHour = getDisplayHour( new Date() ); // returns 13
在 Mac 和 Windows 7 上的 FF 19.0.0.2 上测试。
注意:由于我无法真正重现 OP 的问题,并且考虑到引用的用例,我什至不确定是否需要任何这些变通方法。人们可能期望对 OP 的用例进行更准确的测试,以同时更改时间和区域。例如,不仅仅是 12:00 -> 13:00,而是 12:00 GMT -> 13:00 BST。更准确的 DST 转换模拟是将时钟设置为 2013-03-31 00:59:00 GMT,检查new Date().getHours()
,等待几分钟,然后再次检查小时。
但是,正如我所说,我自己无法重现引用的错误,所以我肯定是错的(在这种情况下,我会修改或删除这个答案)。
无论如何,希望这会有所帮助!