table

          用JavaScript腳本將當(dāng)?shù)貢r(shí)間轉(zhuǎn)換成其它時(shí)區(qū)

          毫無(wú)疑問(wèn),用JavaScript腳本可以通過(guò)直接查看用戶的時(shí)鐘,方便地在網(wǎng)頁(yè)上顯示本地時(shí)間。但是,如果你想顯示不同地區(qū)的時(shí)間—--例如,如果你的本部在別的國(guó)家,你想查看“本國(guó)”時(shí)間而非當(dāng)?shù)貢r(shí)間,又該怎么辦呢?

          要做到這一點(diǎn),必須進(jìn)行各種時(shí)間計(jì)算才能將當(dāng)?shù)貢r(shí)間轉(zhuǎn)換為目的時(shí)間。本文將解釋如何進(jìn)行這些計(jì)算。

          第一步:

          事情的第一步是獲得當(dāng)?shù)貢r(shí)間。在JavaScript中,這無(wú)疑可以通過(guò)初始化一個(gè)Data()對(duì)象來(lái)輕松完成。

          // create Date object for current location

          d = new Date();

          通過(guò)調(diào)用Data()對(duì)象的getTime()方法,即可顯示1970年1月1日后到此當(dāng)時(shí)時(shí)間之間的毫秒數(shù)。

          // convert to msec since Jan 1 1970

          localTime = d.getTime();

          第二步:

          下一步,通過(guò)Data()對(duì)象的getTimezoneOffset()方法來(lái)找出當(dāng)?shù)貢r(shí)間偏移值。在缺省情況下,此方法以分鐘顯示時(shí)區(qū)偏移值結(jié)果,因此在早先的計(jì)算中要將此值轉(zhuǎn)換成毫秒。

          // obtain local UTC offset and convert to msec

          localOffset = d.getTimezoneOffset() * 60000;

          注意,getTimezoneOffset()方法的負(fù)返回值表示當(dāng)?shù)貢r(shí)間在全球標(biāo)準(zhǔn)時(shí)間(UTC)之前,而正返回值則表示當(dāng)?shù)貢r(shí)間在全球標(biāo)準(zhǔn)時(shí)間(UTC)之后。

          注意:萬(wàn)一你想知道我是如何得到60000這個(gè)倍增因數(shù)的,記住1000毫秒等于一秒,而一分鐘等于60秒。因此 ,將分鐘轉(zhuǎn)換成毫秒,要用60乘以1000等于60000。

          第三步

          將本地時(shí)間與本地時(shí)區(qū)偏移值相加得到當(dāng)前國(guó)際標(biāo)準(zhǔn)時(shí)間(UTC)。

          // obtain UTC time in msec

          utc = localTime + localOffset;

          這里,變量utc包含當(dāng)前國(guó)際標(biāo)準(zhǔn)時(shí)間(UTC)。但是,此時(shí)間以1970年1月1日到現(xiàn)在所含有的毫秒數(shù)來(lái)表示。暫時(shí)讓它這樣表示,因?yàn)檫€要進(jìn)行一些計(jì)算。

          第四步

          得到國(guó)際標(biāo)準(zhǔn)時(shí)間(UTC)后,再獲得目標(biāo)城市的國(guó)際標(biāo)準(zhǔn)時(shí)間(UTC)小時(shí)偏移值,把它轉(zhuǎn)換成毫秒,再加上國(guó)際標(biāo)準(zhǔn)時(shí)間(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);

          注意:萬(wàn)一你想知道我是如何得到3600000這個(gè)倍增因數(shù)的,記住1000毫秒等于一秒,而一小時(shí)等于3600秒。因此 ,將小時(shí)轉(zhuǎn)換成毫秒,要用3600乘以1000等于3600000。

          此時(shí),變量bombay包含印度孟買城的當(dāng)?shù)貢r(shí)間。此當(dāng)?shù)貢r(shí)間以1970年1月1日到現(xiàn)在所含有的毫秒數(shù)來(lái)表示。顯然,這不是很合理,因此我們還要進(jìn)行一些計(jì)算。

          第五步

          通過(guò)初始化一個(gè)新的Data()對(duì)象,并調(diào)用此對(duì)象的toLocalString()方法,我們將前一步中計(jì)算得到的時(shí)間值轉(zhuǎn)換成一個(gè)大家可以看得懂的日期/時(shí)間字符串。

          // convert msec value to date string

          nd = new Date(bombay);

          document.writeln("Bombay time is " + nd.toLocaleString() + "<br>");

          這樣轉(zhuǎn)換就完成了!

          總結(jié)

          理解上面的步驟后,我們?cè)倏匆豢催@段腳本(列表A),它建立一個(gè)緊湊,自定義的函數(shù)calcTime()來(lái)執(zhí)行所有的計(jì)算并返回一個(gè)時(shí)間值。

          列表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>

          這里,函數(shù)calcTime()接受一個(gè)城市名及它的國(guó)際標(biāo)準(zhǔn)時(shí)間(UTC)偏移值(按小時(shí)計(jì))。然后內(nèi)部執(zhí)行所有上面描述的計(jì)算,并返回一個(gè)包含此城市當(dāng)?shù)貢r(shí)間的字符串。

          以下是列表A輸出內(nèi)容的一些樣本。

          孟買當(dāng)?shù)貢r(shí)間為2005年8月1日,星期一下午4時(shí)43分51秒

          新加坡當(dāng)?shù)貢r(shí)間為2005年8月1日,星期一下午7時(shí)13分51秒

          倫敦當(dāng)?shù)貢r(shí)間為2005年8月1日,星期一下午12時(shí)13分51秒

          下次你坐下來(lái)為你的網(wǎng)頁(yè)編寫(xiě)時(shí)區(qū)腳本時(shí),這段腳本有望節(jié)省你的一些時(shí)間。享受一下!!

          posted on 2008-10-13 18:00 小卓 閱讀(144) 評(píng)論(0)  編輯  收藏 所屬分類: html and js

          主站蜘蛛池模板: 台东县| 平江县| 嘉禾县| 莫力| 黄石市| 萍乡市| 阜平县| 余干县| 县级市| 长阳| 嘉祥县| 胶州市| 淳安县| 沈丘县| 平罗县| 桃园县| 德阳市| 台州市| 宁武县| 洪雅县| 当涂县| 高尔夫| 保山市| 通许县| 巴彦淖尔市| 新丰县| 尚义县| 文昌市| 浙江省| 海南省| 格尔木市| 东兰县| 北川| 绥芬河市| 琼中| 上饶县| 浠水县| 新邵县| 黎平县| 澄城县| 安新县|