javascript - 如何使时区偏移以 24 小时格式正确显示

标签 javascript reactjs frontend momentjs

我遇到了一个问题,我的应用程序正在从世界不同的地方访问。而且,我有一个图表来显示峰值访问时间。如果从世界的不同地方(而不是原点)访问,我需要它来反射(reflect)转换后的原点时间。但是,按照当前的设置方式,计算将使用 28 的值而不是 00:03 呈现 fooPoint.hour (是)。 我可以查明这发生在 else 条件中,因为,例如,如果他们从澳大利亚访问,使用 fooPoint.hour = 20this .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;
});

最佳答案

因此您有两个可能需要修复的情况:

  1. 时区偏移采用清晨时间并产生负结果。我相信你的代码会处理这个问题。
  2. 时区偏移采用傍晚结果并使其高于 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/

相关文章:

javascript - 从 React.JS 访问 LaunchDarkly 标志

css - Bootstrap 嵌套变坏

javascript - 迭代(for)在 JS 中奇怪地工作

javascript - 为什么我的 sql 语句在编辑器中有效,但在 JS 函数中无效?

javascript - JavaScript 解释器实现策略(函数)——我说得有道理吗?

reactjs - 如何输入 html select 元素,以便 event.target.value 引用选项值类型?

reactjs - Chartjs 3.5.0 - 雷达图 - 将标签转换为图像

javascript - 数据错误() : "TypeError: Cannot read property ' length' of undefined"(Vue. js)

javascript - 单击按钮时如何显示我的定价表?

javascript - 『wds』 : Invalid configuration object. Webpack 已使用与 API 模式不匹配的配置对象初始化