【问题标题】:UTC date convert to local timezoneUTC 日期转换为本地时区
【发布时间】:2016-10-12 05:58:01
【问题描述】:

我有一个 UTC 格式的日期。

"2016-10-12 05:03:51"

我做了一个函数来将 UTC 日期转换为我的本地时间。

function FormatDate(date)
{   
    var arr = date.split(/[- :T]/), // from your example var date = "2012-11-14T06:57:36+0000";
    date = new Date(arr[0], arr[1]-1, arr[2], arr[3], arr[4], 00);

    var newDate = new Date(date.getTime()+date.getTimezoneOffset()*60*1000);

    var offset = date.getTimezoneOffset() / 60;

    var hours = date.getHours();

    newDate.setHours(hours - offset);

    return newDate;
}

我的本​​地时区是 GMT +0530。

我的代码产生了这个输出:

Tue Oct 11 2016 10:33:00 GMT+0530 (IST)

我使用在线工具转换日期以获得正确的日期和时间。

Wednesday, October 12, 2016 10:30 AM

我的代码准时匹配在线工具,但不匹配日期。

如何更正我的代码输出,最好使用moment.js

【问题讨论】:

    标签: javascript momentjs


    【解决方案1】:

    UTC 是一种标准,而不是一种格式。我假设您的意思是您的字符串使用零偏移量,即“2016-10-12 05:03:51”是“2016-10-12 05:03:51+0000”

    您在解析字符串时处于正确的轨道上,但您可以使用 UTC 方法来阻止主机在创建日期时调整系统偏移量的值。

    function parseDateUTC(s){   
      var arr = s.split(/\D/);
      return new Date(Date.UTC(arr[0], arr[1]-1, arr[2], arr[3], arr[4], arr[5]));
    }
    
    console.log(parseDateUTC('2016-10-12 05:03:51').toLocaleString());

    如果您想使用 moment.js,您可以执行以下操作。它在解析字符串时强制使用 UTC,然后在本地将其写入输出:

    var d = moment.utc('2016-10-12 05:03:51','YYYY-MM-DD HH:mm:ss');
    console.log(d.local().format());
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.10.0/moment.js"></script>

    【讨论】:

      【解决方案2】:

      既然你已经标记了moment,我假设你正在使用moment。

      在这种情况下,您应该保持方法一致,不要混合使用时刻和日期对象。

      var dateStr = '2016-10-12 05:03:51';
      var timeZone = "+0530";
      var date = moment.utc(dateStr).utcOffset(dateStr + timeZone)
      console.log(date.toString())

      【讨论】:

      • 为我返回一个错误。此外,您应该始终告诉解析器您提供的格式,否则您依赖它正确猜测。
      猜你喜欢
      • 2015-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-29
      • 2020-03-25
      • 2012-10-07
      相关资源
      最近更新 更多