【问题标题】:Javascript to convert UTC to local time将UTC转换为本地时间的Javascript
【发布时间】:2012-11-17 07:28:52
【问题描述】:

好的,说JSON解析字符串UTC日期如下:

2012-11-29 17:00:34 UTC

现在,如果我想将此 UTC 日期转换为我的本地时间,我该怎么做?

如何将其格式化为 yyyy-MM-dd HH:mm:ss z 之类的其他内容?

这个date.toString('yyyy-MM-dd HH:mm:ss z'); 永远不会成功:/

【问题讨论】:

  • new Date("2012-11-29 17:00:34 UTC") 将是正在使用该页面的客户端的当地时间
  • 您可以使用空格或符号将其拆分为数组。假设您执行 .split(" ") 并带有日期和时间的数组,并且将形成“utc”。然后像这样再次拆分它 .split("-") 并像这样拆分时间 .split(":") 等等。
  • 只为任何在这里谷歌搜索的人。值得记住的是,在 MYSQL 中,绝对完美地转换到任何时区非常容易(这包括完美地照顾夏令时)。由于几乎所有数据都来自服务器上的 mysql,因此值得牢记这一点。

标签: javascript datetime


【解决方案1】:
// d = "2021-09-23T15:51:48.31"

console.log(new Date(d + "z").toLocaleDateString());  // gives 9/23/2021

console.log(new Date(d + "z").toLocaleString()); // gives 9/23/2021, 10:51:48 AM
console.log(new Date(d + "z").toLocaleTimeString()); // gives 10:51:48 AM

【讨论】:

    【解决方案2】:

    这适用于 ChromeFirefox
    未在其他浏览器上测试。

    const convertToLocalTime = (dateTime, notStanderdFormat = true) => {
      if (dateTime !== null && dateTime !== undefined) {
        if (notStanderdFormat) {
          // works for 2021-02-21 04:01:19
          // convert to 2021-02-21T04:01:19.000000Z format before convert to local time
          const splited = dateTime.split(" ");
          let convertedDateTime = `${splited[0]}T${splited[1]}.000000Z`;
          const date = new Date(convertedDateTime);
          return date.toString();
        } else {
          // works for 2021-02-20T17:52:45.000000Z or  1613639329186
          const date = new Date(dateTime);
          return date.toString();
        }
      } else {
        return "Unknown";
      }
    };
    
    // TEST
    
    console.log(convertToLocalTime('2012-11-29 17:00:34 UTC'));

    【讨论】:

      【解决方案3】:

      这是另一个输出 mm/dd/yy 的选项:

      const date = new Date('2012-11-29 17:00:34 UTC');
      date.toLocaleString();
      //output 11/29/2012
      

      【讨论】:

        【解决方案4】:

        您可以查看 date-and-time api,以便轻松进行日期操作。

        let now = date.format(new Date(), 'YYYY-MM-DD HH:mm:ss', true);
        console.log(now);
        <script src="https://cdn.jsdelivr.net/npm/date-and-time/date-and-time.min.js"></script>

        【讨论】:

          【解决方案5】:

          上述解决方案是正确的,但可能会在 FireFox 和 Safari 中崩溃!这就是webility.js 试图解决的问题。检查toUTC函数,它适用于大多数主要浏览器,它以ISO格式返回时间

          【讨论】:

            【解决方案6】:
            var offset = new Date().getTimezoneOffset();
            

            offset 将是从本地时间到 UTC 的时间间隔(以分钟为单位)。要从 UTC 日期获取本地时间,您需要从日期中减去分钟。

            utc_date.setMinutes(utc_date.getMinutes() - offset);
            

            【讨论】:

            • 我认为应该是减去偏移量,而不是添加偏移量。
            • + 是合适的,因为如果时区落后 1 小时,则返回的值将是 -60。
            • @OnResolve Surabhi 使用+ 是正确的。使用date.getTimezoneOffset时,“getTimezoneOffset() 的负返回值表示当前位置早于UTC,而正值表示该位置晚于UTC。” (Tech Republic) .
            • 至少在 chrome 中这是错误的。即使是负时区也会以正数返回。
            • @Surabhi @WebWanderer 这个解释说明了为什么在这里使用+ 是不正确的。从getTimezoneOffset() 返回的值是您需要添加到本地时间以达到 UTC 的值。因此,如果您想从 UTC 转到本地时间,则操作需要为 -。基本上,这个答案与请求相反,从本地时间转换为 UTC。
            【解决方案7】:
            /*
             * convert server time to local time
             *  simbu
            */
            function convertTime(serverdate) {
                var date = new Date(serverdate);
                // convert to utc time
                var toutc = date.toUTCString();
                //convert to local time
                var locdat = new Date(toutc + " UTC");
                return locdat;
            }
            

            【讨论】:

              【解决方案8】:

              要格式化您的日期,请尝试以下功能:

              var d = new Date();
              var fromatted = d.toLocaleFormat("%d.%m.%Y %H:%M (%a)");
              

              但这样做的缺点是,它是一个非标准函数,在 Chrome 中不起作用,但在 FF 中起作用(afaik)。

              克里斯

              【讨论】:

                【解决方案9】:

                这应该可以工作

                var date = new Date('2012-11-29 17:00:34 UTC');
                date.toString()
                

                【讨论】:

                • 不!不在 Safari 中。
                【解决方案10】:

                试试:

                var date = new Date('2012-11-29 17:00:34 UTC');
                date.toString();
                

                【讨论】:

                • 嗯,我试过IE和Firefox,都是NAN!日期无效?
                • 使用 date.js 库 this works 获取日期格式 yyyy-MM-dd HH:mm:ss
                • 2012/11/29
                • 这仅适用于 chrome 浏览器,不适用于 mozilla firefox 和 IE11。你有针对所有其他浏览器的解决方案吗?
                • 似乎很傻,Date 原型上没有一个方法可以在本地时间而不是 GMT/UTC 返回日期对象
                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2018-07-27
                • 2011-10-11
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2020-02-08
                相关资源
                最近更新 更多