簡體   English   中英

在JavaScript中設置運行時鍾的時區

[英]Setting timezone for running clock in JavaScript

大家好。 我有一個運行時鍾的漂亮干凈的代碼。

<script type="text/javascript">

function DisplayTime(){
if (!document.all && !document.getElementById)
return
timeElement=document.getElementById? document.getElementById("curTime"): document.all.tick2
var CurrentDate=new Date()
var hours=CurrentDate.getHours()
var minutes=CurrentDate.getMinutes()
var seconds=CurrentDate.getSeconds()
var DayNight="PM"
if (hours<12) DayNight="AM";
if (hours>12) hours=hours-12;
if (hours==0) hours=12;
if (minutes<=9) minutes="0"+minutes;
if (seconds<=9) seconds="0"+seconds;
var currentTime=hours+":"+minutes+":"+seconds+" "+DayNight;
timeElement.innerHTML="<font style='font-family:Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800&subset=latin,cyrillic-ext,latin-extfont-size:14px;color:#fff;'>"+currentTime+"</b>"
setTimeout("DisplayTime()",1000)
}
window.onload=DisplayTime

</script>

我唯一的問題是它基於系統時間。 如何設置時區,以便根據指定的時區顯示正確的時間?

除了本地(系統)時間和UTC之外,JavaScript Date對象中沒有任何可處理任何時區的內置對象。

您可以通過使用兩個時區(本地或UTC)之一與您要使用的時區之間的增量,為Date實例提供錯誤的時間來實現此目的。 如果使用UTC,則更容易。

例如,假設我們要在格林尼治標准時間+01:00花費時間:

var dt = new Date();
dt.setTime(dt.getTime() + (60 * 60 * 1000));
//                         ^^^^^^^^^^^^^^---- one hour in milliseconds,
//                                            which is our offset from UTC/GMT
var hours = dt.getUTCHours();       // Use UTC methods to get time
var minutes = dt.getUTCMinutes();
var seconds = dt.getUTCSeconds();

時間的東西,尤其是時區的東西,很難。 您可能會考慮使用它來使用庫,盡管對於這種時鍾而言,這可能會過時了。 MomentJS是一個很好的庫(具有時區附加組件)。

您可以使用Date對象的getTimezoneOffset方法。 它會根據您的時區(以分鍾為單位)為您提供時區偏移量。

因此,為了獲得UTC(+0時區)的當前時間,您可以執行以下操作:

var tzOffset = CurrentDate.getTimezoneOffset();

// some timezones are not set hours, so we must calculate the minutes
var minutesOffset = parseInt(tzOffset%60,10);

// the offset hours for the timezone
var hoursOffset = parseInt(tzOffset/60, 10);

然后,您需要在代碼中做一些數學運算以解決偏移量:

var hours   = CurrentDate.getHours() + hoursOffset;
var minutes = CurrentDate.getMinutes() + minutesOffset;

這將說明您的時區。 如果要計算指定的另一個時區,請更改上面的tzOffset以顯示您的時區。

var tzOffset = CurrentDate.getTimezoneOffset() + TIMEZONE_HOURS*60;

TIMEZONE_HOURS是您想要的時區,以小時為單位,例如,如果要UTC + 3,則必須將TIMEZONE_HOURS設置為3

總體而言,時區是一項復雜的任務,因為它們變化很大,並且有一些注意事項。 如果您想對此進行更多說明,請在關於SO的另一個問題中檢查此答案

請訪問此鏈接作為參考

例:

var x = new Date();
var currentTimeZoneOffsetInHours = x.getTimezoneOffset() / 60;

我已經通過添加更多功能來獲得您想要的內容來實現您的工作代碼。 看到這會有所幫助

 function DisplayTime(timeZoneOffsetminutes){ if (!document.all && !document.getElementById) return timeElement=document.getElementById? document.getElementById("curTime"): document.all.tick2 var requiredDate=getTimeZoneTimeObj(timeZoneOffsetminutes) var hours=requiredDate.h; var minutes=requiredDate.m; var seconds=requiredDate.s; var DayNight="PM"; if (hours<12) DayNight="AM"; if (hours>12) hours=hours-12; if (hours==0) hours=12; if (minutes<=9) minutes="0"+minutes; if (seconds<=9) seconds="0"+seconds; var currentTime=hours+":"+minutes+":"+seconds+" "+DayNight; timeElement.innerHTML="<font style='font-family:Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800&subset=latin,cyrillic-ext,latin-extfont-size:14px;color:#fff;'>"+currentTime+"</b>" setTimeout("DisplayTime(-330)",1000) } window.onload=DisplayTime(-330); function getTimeZoneTimeObj(timeZoneOffsetminutes){ var localdate = new Date() var timeZoneDate = new Date(localdate.getTime() + ((localdate.getTimezoneOffset()- timeZoneOffsetminutes)*60*1000)); return {'h':timeZoneDate.getHours(),'m':timeZoneDate.getMinutes(),'s':timeZoneDate.getSeconds()}; } 
 #curTime{ background-color:#000; } 
 <div id="curTime"></div> 

您可以嘗試使用moment.js

這是一個很好的庫,它也處理時區。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM