作者: BUILDER.COM
毫無疑問,用JavaScript腳本可以透過直接查看使用者的時鐘,方便地在網頁上顯示本地時間。但是,如果你想顯示不同地區的時間—--例如,如果你的本部在別的國家,你想查看「本國」時間而非當地時間,又該怎麼辦呢?
要做到這一點,必須進行各種時間計算才能將當地時間轉換為目的時間。本文將說明如何進行這些計算。
第一步:
事情的第一步是獲得當地時間。在JavaScript中,這無疑可以透過初始化一個Data()物件來輕鬆完成。
// create Date object for current location
d = new Date();
透過呼叫Data()物件的getTime()方法,即可顯示1970年1月1日後到此當時時間之間的毫秒數。
// convert to msec since Jan 1 1970
localTime = d.getTime();
第二步:
下一步,透過Data()物件的getTimezoneOffset()方法來找出當地時間偏移值。在缺省情況下,此方法以分鐘顯示時區偏移值結果,因此在早先的計算中要將此值轉換成毫秒。
// obtain local UTC offset and convert to msec
localOffset = d.getTimezoneOffset() * 60000;
注意,getTimezoneOffset()方法的負回傳值表示當地時間在全球標準時間(UTC)之前,而正回傳值則表示當地時間在全球標準時間(UTC)之後。
註:萬一你想知道我是如何得到60000這個倍增因數的,記住1000毫秒等於一秒,而一分鐘等於60秒。因此,將分鐘轉換成毫秒,要用60乘以1000等於60000。
第三步
將本地時間與本地時區偏移值相加得到目前國際標準時間(UTC)。
// obtain UTC time in msec
utc = localTime + localOffset;
這裡,變數utc包含目前國際標準時間(UTC)。但是,此時間以1970年1月1日到現在所包含的毫秒數來表示。暫時讓它這樣表示,因為還要進行一些計算。
第四步
得到國際標準時間(UTC)後,再獲得目標城市的國際標準時間(UTC)小時偏移值,把它轉換成毫秒,再加上國際標準時間(UTC)。
// obtain and add destination's UTC time offset
// for example, Bombay
// which is UTC + 5.5 hours
offset = 5.5;
bombay = utc + (3600000*offset);
注意:萬一你想知道我是如何得到這個倍增因數的,記住1000毫秒等於一秒,而一小時等於3600秒。因此,將小時轉換成毫秒,要用3600乘以1000等於3600000。
此時,變數bombay包含印度孟買城的當地時間。此當地時間以1970年1月1日到現在所包含的毫秒數來表示。顯然,這不是很合理,因此我們還要進行一些計算。
第五步
透過初始化一個新的Data()對象,並呼叫此物件的toLocalString()方法,我們將前一步計算得到的時間值轉換成一個大家可以看得懂的日期/時間字串。
// convert msec value to date string
nd = new Date(bombay);
document.writeln("Bombay time is " + nd.toLocaleString() + "<br>");
這樣轉換就完成了!
總結
理解上面的步驟後,我們再看一看這段腳本(列表A),它建立一個緊湊,自訂的函數calcTime()來執行所有的計算並傳回一個時間值。
列表A
<html>
<head>
<script language="JavaScript">
// function to calculate local time
// in a different city
// given the city's UTC offset
function calcTime(city, offset) {
// create Date object for current location
d = new Date();
// convert to msec
// add local time zone offset
// get UTC time in msec
utc = d.getTime() + (d.getTimezoneOffset() * 60000);
// create new Date object for different city
// using supplied offset
nd = new Date(utc + (3600000*offset));
// return time as a string
return "The local time in " + city + " is " + nd.toLocaleString();
}
// get Bombay time
alert(calcTime('Bombay', '+5.5'));
// get Singapore time
alert(calcTime('Singapore', '+8'));
// get London time
alert(calcTime('London', '+1'));
</script>
</head>
<body>
< /body>
</html>
這裡,函數calcTime()接受一個城市名及它的國際標準時間(UTC)偏移值(按小時計)。然後內部執行所有上面描述的計算,並傳回一個包含此城市當地時間的字串。
以下是列表A輸出內容的一些樣本。
孟買當地時間為2005年8月1日,星期一下午4時43分51秒
新加坡當地時間為2005年8月1日,星期一下午7時13分51秒
倫敦當地時間為2005年8月1日,星期一下午12時13分51秒
下次你坐下來為你的網頁編寫時區腳本時,這段腳本有望節省你的一些時間。享受一下! !