[英]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的另一個問題中檢查此答案
我已經通過添加更多功能來獲得您想要的內容來實現您的工作代碼。 看到這會有所幫助
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.