Я хотел бы создать часы JavaScript для конкретного часового пояса - PullRequest
2 голосов
/ 31 октября 2011

Я хотел бы добавить часы на свой веб-сайт, отображающие время в центральном часовом поясе. Я включил код, который у меня есть до сих пор. Я хочу использовать это, чтобы сообщить пользователям, когда другие инструменты на моем веб-сайте будут активны (они не активны ночью в центральном часовом поясе). Кто-нибудь знает, как (1) зафиксировать это в центральное время; и (2) возможно, поверните его в красный цвет с 8:00 вечера. - 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 ]

5 голосов
/ 31 октября 2011

Если вы создаете локальный объект даты, он будет находиться в часовом поясе локальной системы (независимо от того, какой это может быть установлен, который не может быть фактическим местным часовым поясом). У объектов даты есть метод getTimezoneOffset , который возвращает число в минутах, которое при добавлении к локальному объекту даты устанавливает его в UTC (по существу, по Гринвичу). Затем вы можете вычесть смещение для «центрального времени» (каким бы оно ни было), чтобы получить время в этом часовом поясе.

Затем вы можете использовать этот объект даты для времени в этой зоне.

Если часовой пояс является центральным часовым поясом США, стандартное смещение составляет -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.
}
2 голосов
/ 05 декабря 2013

Объект 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>
...