我遇到了一个问题,我的应用程序正在从世界不同的地方访问。而且,我有一个图表来显示峰值访问时间。如果从世界的不同地方(而不是原点)访问,我需要它来反射(reflect)转换后的原点时间。但是,按照当前的设置方式,计算将使用 28
的值而不是 00:03
呈现 fooPoint.hour
(是)。
我可以查明这发生在 else
条件中,因为,例如,如果他们从澳大利亚访问,使用 fooPoint.hour = 20
和 this .state.timeZoneOffset = -8
。 20 - (-8) = 28
我希望它显示为 00:04
。我知道我的计算是错误的,所以有人可以帮我正确格式化它吗?
我没有提到 fooPoint.hour
实际上是我在 foo
对象(从 API 获取)中获取的数据点,因此它代表了 avg 。特定地点的高峰时间。当从世界不同地区的另一个位置查看时,我需要考虑时区差异,以便在图表中显示高峰时间,但在其时区上
图书馆是一个低技术债务的解决方案吗?
我有这样的对象数组:
foo: {
hour: 20
}
我这样获取时区偏移量:
let tzOffset = new Date().getTimezoneOffset()/60;
并将其存储在状态中
然后我有:
foo.forEach((fooPoint) => {
fooPoint.hour =
fooPoint.hour - this.state.timeZoneOffset < 0
? fooPoint.hour - this.state.timeZoneOffset + 24
: foorPoint.hour - this.state.timeZoneOffset;
});
最佳答案
因此您有两个可能需要修复的情况:
- 时区偏移采用清晨时间并产生负结果。我相信你的代码会处理这个问题。
- 时区偏移采用傍晚结果并使其高于 24。您的代码缺少此调整。
尝试
foo.forEach((fooPoint) => {
fooPoint.hour -= this.state.timeZoneOffset;
fooPoint.hour =
fooPoint.hour < 0
? fooPoint.hour + 24
: foorPoint.hour >= 24
? fooPoint.hour - 24
: fooPoint.hour;
});
把减法移出来只是因为我懒,不想重复五次。
这里的关键部分是测试这两种可能性。
您可能还会发现它作为 if
语句更具可读性。
foo.forEach((fooPoint) => {
fooPoint.hour -= this.state.timeZoneOffset;
if (fooPoint.hour < 0) {
fooPoint.hour += 24;
} else if (fooPoint.hour >= 24) {
fooPoint.hour -= 24;
}
});
两者在功能上是相同的,但许多人会发现更容易理解。
关于javascript - 如何使时区偏移以 24 小时格式正确显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54975082/