我想为特定时区创建一个javascript时钟

时间:2011-10-30 21:31:20

标签: javascript time clock

我想在我的网站上添加一个时钟,在中央时区显示时间。我已经包含了我迄今为止的代码。我想用它来告诉用户我的网站上的其他工具何时处于活动状态(它们在中央时区的夜晚不活动)。有谁知道如何(1)将其锁定到中央时间; (2)从晚上8点开始可能会变成红色。 - 早上7:30(表示工具已关闭)?

<script type="text/javascript">

function GetClock(){
d = new Date();
nhour  = d.getHours();
nmin   = d.getMinutes();
     if(nhour ==  0) {ap = " AM";nhour = 12;} 
else if(nhour <= 11) {ap = " AM";} 
else if(nhour == 12) {ap = " PM";} 
else if(nhour >= 13) {ap = " PM";nhour -= 12;}

if(nmin <= 9) {nmin = "0" +nmin;}

document.getElementById('clockbox').innerHTML=""+nhour+":"+nmin+ap+"";
setTimeout("GetClock()", 1000);
}
window.onload=GetClock;
</script>
<div id="clockbox"></div>

2 个答案:

答案 0 :(得分:5)

如果创建本地日期对象,它将位于本地系统的时区中(可能设置的任何内容,可能不是实际的本地时区)。日期对象有一个 getTimezoneOffset 方法,该方法返回一个以分钟为单位的数字,如果添加到本地日期对象,则将其设置为UTC(实际上是GMT)。然后,您可以减去“中心时间”(无论可能是什么)的偏移量,以便在该时区内获得时间。

然后,您可以将该日期对象用于该区域中的时间。

如果时区是美国中部时区,则标准偏移为-6小时,夏令时偏移为-5小时。返回具有特定偏移量的日期对象的函数是:

/* Create a date object with the desired offset.
   Offset is the time that must be added to local time to get
   UTC, so if time zone is -6hrs, offset is +360. If time zone
   is +10hrs, offset is -600.
*/
function getOffsetDate(offsetInMintues) {
  // Get local date object
  var d = new Date();
  // Add local time zone offset to get UTC and 
  // Subtract offset to get desired zone
  d.setMinutes(d.getMinutes() + d.getTimezoneOffset() - offsetInMintues);
  return d;
}

给它适当的偏移量,它将返回一个带有该偏移量的日期对象。获得美国标准中央时间:

var centralDate = getOffsetDate(360);

美国中央夏令时:

var centralDSTDate = getOffsetDate(300);

要在特定时间之间执行某些操作,您可以执行以下操作:

var h = centralDate.getHours();
var m = centralDate.getMinutes(); 
if (h >= 20 || 
  h <7 ||
  (h == 7 && m <= 30) {
  // the time is between 20:00 and 07:30 the following day.
}

答案 1 :(得分:2)

可以将Date对象修改为您喜欢的任何值,并自动更正。 “windTheClock(2);”将时区偏移设置为+2 UTC。

<script type="text/javascript">

function addLeadingZero(n) {
    if (n < 10) {
        n = "0" + n;
    }
    return n;
}

function windTheClock(timeZoneOffset)
{
    var d = new Date();
    d.setHours(d.getUTCHours() + timeZoneOffset); // set time zone offset
    var h = d.getHours();
    var m = d.getMinutes();
    var s = d.getSeconds();
    h = addLeadingZero(h);
    m = addLeadingZero(m);
    s = addLeadingZero(s);
    document.all["clock"].innerHTML = h + ":" + m + ":" + s;
    setTimeout(function(){ windTheClock(timeZoneOffset) }, 1000);
}

window.onload = function() {
    windTheClock(2);
}

</script>

<div id="clock"></div>