【问题标题】:Convert timestamp to local timezone in React or JavaScript在 React 或 JavaScript 中将时间戳转换为本地时区
【发布时间】:2021-03-10 11:09:30
【问题描述】:

我从使用 UTC 时区的 API 获取时间戳,我的时区是 UTC+2 我还使用 timeago-react 包来显示 API 生成的某些数据的时间前

const timestamp = blocks && blocks.block.timestamp; // getting data from API
let time = new Date(timestamp);
<p className="text-sm font-light">
 <TimeAgo datetime={time} locale="en_US" />
</p>

我遇到的问题是 API 返回的时间戳为上午 11 点,由于我的时区是 UTC+2,所以对我来说是下午 1 点,这里的问题是 UTC+2 时区的用户上午 11 点 UTC = 下午 1 点,但是在时间之前,它显示数据是在 2 小时前生成的,这是不正确的。它是在我调用该 API 的那一刻生成的。

有什么解决方法吗?这样它就会自动计算时间并将其转换为用户拥有的任何时区

【问题讨论】:

标签: javascript reactjs datetime


【解决方案1】:

使用moment.js 使用 moment.js,您将能够获取用户时区,例如“America/Los_Angeles”并将任何现有时间戳转换为指定的时区。与使用 JS Date 相比,更具可读性和可维护性。

在你的情况下,代码应该是这样的

var timezone = moment.tz.guess();
var now = moment();
var la_now = now.tz('America/Los_Angeles');
// print using la_now.format('YYYY-MM-DD HH:mm:ss');

【讨论】:

    【解决方案2】:

    感谢大家的回答,在做了一些研究之后,我能够使用 vanilla JS 来实现它:

      const fixDate = (date) => {
        let dateLocal = new Date(date);
        let newDate = new Date(
          dateLocal.getTime() - dateLocal.getTimezoneOffset() * 60 * 1000
        );
        return newDate;
      };
    

    【讨论】:

      猜你喜欢
      • 2019-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-15
      • 2018-04-17
      • 2016-01-14
      • 2011-02-06
      • 1970-01-01
      相关资源
      最近更新 更多