【问题标题】:How to convert a time to user local timezone in javascript如何在javascript中将时间转换为用户本地时区
【发布时间】:2019-05-23 18:24:50
【问题描述】:

我从 API 获得了这种 "2019-05-05T10:30:00Z" 类型的时间。但我需要像这样转换它"10:30 AM (3:30 PM Your Time)"。我在客户端使用 reactJs。如何将时间转换为用户当前时区?

【问题讨论】:

标签: javascript reactjs time


【解决方案1】:

const dateToTime = date => date.toLocaleString('en-US', {
  hour: 'numeric',
  minute: 'numeric'
});

const dateString = "2019-05-05T10:30:00Z";
const userOffset = new Date().getTimezoneOffset()*60*1000;
const localDate = new Date(dateString);
const utcDate = new Date(localDate.getTime() + userOffset);

console.log(`${dateToTime(utcDate)} (${dateToTime(localDate)} Your Time)`);

【讨论】:

    【解决方案2】:

    您的 API 向服务器发送 DateTime 作为响应,您只需使用以下可以转换为您当地时区的函数。

    function convertUTCDateToLocalDate(date) {
      var dateLocal = new Date(date);
      var newDate = new Date(dateLocal.getTime() - dateLocal.getTimezoneOffset()*60*1000);
      return newDate;
    }
    

    【讨论】:

      【解决方案3】:

      看看momentjs。它具有本地化功能,您还可以进行自定义操作。

      https://momentjs.com

      【讨论】:

      • 为什么推荐一个完整的框架来完成一个相对简单的任务?
      • 这只是一个库,我也喜欢它,我几乎所有的项目都使用它。所以我推荐它,它有什么问题?
      • 不幸的是,Moment 自己的网站建议不要在 2020 年之前使用它。
      【解决方案4】:

      我假设您的 API 返回 UTC 时间。从 here 开始,我们可以在标准 JavaScript 可解析日期的末尾使用 UTC。 当 str 是 API 中的字符串时:

      var date = new Date(str.substring(0, 10)+" "+str.substring(11, 19)+" UTC")

      我确信有更好的解决方案,但这会手动删除您不需要的部分。你可以访问这个Date 对象来提取你需要的东西。

      【讨论】:

        猜你喜欢
        • 2015-08-03
        • 1970-01-01
        • 2021-12-12
        • 2020-02-08
        • 1970-01-01
        • 1970-01-01
        • 2016-01-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多