#javascript #time #clock
#javascript #время #часы
Вопрос:
Я хотел бы добавить часы на свой веб-сайт, отображающие время в Центральном часовом поясе. Я включил код, который у меня есть до сих пор. Я хочу использовать это, чтобы сообщать пользователям, когда другие инструменты на моем веб-сайте будут активны (они не активны ночью в Центральном часовом поясе). Кто-нибудь знает, как (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>
Ответ №1:
Если вы создадите объект local date, он будет находиться в часовом поясе локальной системы (независимо от того, что может быть установлено, что может не соответствовать фактическому местному часовому поясу). Объекты Date имеют метод getTimezoneOffset, который возвращает число в минутах, которое при добавлении к локальному объекту date устанавливает для него значение UTC (по сути, GMT). Затем вы можете вычесть смещение для «центрального времени» (каким бы оно ни было), чтобы получить время в этом часовом поясе.
Затем вы можете использовать этот объект date для времени в этой зоне.
Если часовой пояс является Центральным часовым поясом США, стандартное смещение составляет -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;
}
Дайте ему соответствующее смещение, и он вернет объект date с этим смещением. Чтобы получить стандартное центральное время:
var centralDate = getOffsetDate(360);
Для НАС центральное летнее время:
var centralDSTDate = getOffsetDate(300);
Чтобы сделать что-то между определенными временами, вы можете сделать что-то вроде:
var h = centralDate.getHours();
var m = centralDate.getMinutes();
if (h >= 20 ||
h <7 ||
(h == 7 amp;amp; m <= 30) {
// the time is between 20:00 and 07:30 the following day.
}
Ответ №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>
версия w / am / pm
function addLeadingZero(n) {
return n < 10 ? '0' n : 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();
var ampm = h >= 12 ? 'pm' : 'am';
h = h % 12;
h = h ? h : 12; // replace '0' w/ '12'
h = addLeadingZero(h);
m = addLeadingZero(m);
s = addLeadingZero(s);
document.all["clock"].innerHTML = h ':' m ':' s
' ' ampm;
setTimeout(function(){ windTheClock(timeZoneOffset) }, 1000);
}
window.onload = function() {
windTheClock(2);
}
Комментарии:
1. Спасибо. Отлично работает, но как вы это делаете, показывая 12-часовой формат am / pm?