2016-10-12 207 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