用JavaScript指令碼將當地時間轉換成其它時區

來源:互聯網
上載者:User
javascript|指令碼|轉換

毫無疑問,用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);

注意:萬一你想知道我是如何得到3600000這個倍增因數的,記住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秒

下次你坐下來為你的網頁編寫時區指令碼時,這段指令碼有望節省你的一些時間。享受一下!!



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.