2016-10-12 167 views
0

我有一个UTC格式的日期。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; 
} 

我的本地时区是格林威治标准时间+0530。

我的代码生成的输出:

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

我转换的日期与一个在线工具,以获得正确的日期和时间。

Wednesday, October 12, 2016 10:30 AM 

我的代码按时与在线工具匹配,但没有与日期匹配。

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

回答

0

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

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

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

+0

为我返回一个错误。此外,你应该总是告诉解析器你给它的格式,否则你依靠猜测正确。 – RobG

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>

+0

感谢RobG 这对我的作品! –

+0

非常感谢,你救了我的一天! – bravohex