2010-05-18 111 views
1

我有一個毫秒的時間,即1274203800000,現在我想在JavaScript中將其轉換爲GMT + 10。毫秒到各種格林威治時間時區轉換

目前我使用下面的代碼來做到這一點

var milliseconds=1274203800000; 
var offset='+10'; 
var d = new Date(milliseconds); 
utc = d.getTime() + (d.getTimezoneOffset() * 60000); 
nd = new Date(utc + (3600000*offset)); 
var result=nd.toLocaleString(); 
alert(result); 

上面代碼中的計算結果爲「星期三,2010年5月19日上午03時三十分00秒」的日期,但這不是正確的輸出爲「週二, 2010年5月18日3:30:00 AM「(不知道這種情況下的AM或PM)是正確的。但我不知道這裏有什麼問題。

我的當前localtimezone是GMT + 0530。

回答

3

這裏我可以得到所需的輸出

var milliseconds=1274203800000; 
var offset=10; 
var d = new Date(milliseconds+(3600000*offset)); 
alert(d.toUTCString()); 

Initial Input: Tue, 18 May 2010 17:30:00 GMT 
Desired Output: Wed, 19 May 2010 03:30:00 GMT 
2

時間戳保存爲UTC。 1274203800000對應於2010-05-18 17:30:00 UTC,這確實是2010-05-19 03:30:00 UTC+10。我不知道如何從該時間戳獲得2010-05-18 03:30:00 - 它必須是UTC-14,並且沒有哪個國家將其作爲時區。

(旁白:在你的代碼,因爲它代表,第一次使用的new Date().getTime()什麼都不做,因爲它會返回相同的milliseconds

ETA:你不超過toLocaleString()格式得到任何控制,格式來自用戶的操作系統和瀏覽器設置。在我的機器上,我獲得了12小時制時鐘和一個包含時區名稱。這是令人討厭的,因爲我認爲12-hour time is a total disaster that should be wiped from the face of the planet和時區實際上是錯誤的。

但無論如何,如果你想要一個特定的時間格式,你必須自己創建它,因爲JS沒有提供格式選項。這可以說是相當繁瑣:

var daynames= ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']; 
var monthnames= ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']; 
function padLeft(s, l, c) { 
    return new Array(l-s.length+1).join(c || ' ')+s; 
}; 

function to12HourTime(x) { 
    var dn= daynames[x.getUTCDay()]; 
    var mn= monthnames[x.getUTCMonth()]; 
    var d= padLeft(''+x.getUTCDate(), 2, '0'); 
    var y= padLeft(''+x.getUTCFullYear() ,4, '0'); 
    var h= x.getUTCHours(); 
    var m= padLeft(''+x.getUTCMinutes(), 2, '0'); 
    var s= padLeft(''+x.getUTCSeconds(), 2, '0'); 
    var p= h>=12? 'PM' : 'AM'; 
    h= (h+11)%12+1; 
    return dn+', '+mn+' '+d+', '+y+' '+h+':'+m+':'+s+' '+p; 
} 

var t= 1274203800000; 
var d= new Date(t+1000*60*60*10); 
alert(to12HourTime(d)); 
// Wednesday, May 19, 2010 3:30:00 AM 
+0

好吧,我不知道生根粉UTC所以最終如果我想1274203800000轉換成GMT +10那麼有沒有任何選項在JavaScript可用? – hunt 2010-05-18 14:36:10

+1

你已經有了。 '1274203800000' **是**'2010-05-19 03:30:00 UTC + 10'。如果您使用數字「1274203800000」代表某個其他時間,那麼您得到的不是標準的JavaScript時間戳,而必須確定它到底是什麼。 – bobince 2010-05-18 14:48:59

+0

你是對的它已經+10現在我怎麼會將它轉換成12小時格式? – hunt 2010-05-18 15:35:26

0

1274203800000在Epoch是星期二,2010 5月18日17:30:00 GMT

(你可以使用這個時代轉換http://www.epochconverter.com/

現在,如果你這樣做:

var milliseconds=1274203800000; 
var d = new Date(milliseconds); 
alert(d.toUTCString()); 

你得到正確的GMT時間。

+0

感謝格林威治標準時間,因爲它目前給我的星期二,2010年5月18日17:30:00現在我想添加+10,所以有什麼選項可用於該 – hunt 2010-05-18 15:16:23

+0

我認爲它已經是+10作爲bobince說現在我如何將它轉換成12小時制? – hunt 2010-05-18 15:34:34

相關問題