UTC日期转换为当地时区

时间:2016-10-12 05:58:02

标签: javascript momentjs

我有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

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

由于您已标记moment,我假设您正在使用时刻。

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

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