БлогNot. Идущие часы на Javascript...

Идущие часы на Javascript...

При абсолютной банальности вопроса найти короткий, работающий и кроссбраузерный кусочек кода не так легко - то решение устарело, то длинно и непонятно, то нужно JQuery подключать, то виджет ставить, то какие-то навороченные картинки вместо скромных часиков и т.п. Меж тем, всё на порядок проще - если нам достаточно отображения клиентского (установленного на часах Вашего компьютера) времени, то делаем так:

1. Подготовить элемент HTML, куда будем писать время, например

<span id="clock"></span>

2. В теге яваскрипта

<script type="text/javascript"> ... </script>

получить время из нового объекта Date:

var date = new Date();

Так как код будет выполняться неоднократно, следует предусмотреть функцию, которая затем будет вызываться повторно. Назовём её clock()

3. Записать в переменные нужные "части" даты, извлечённые стандартными методами, например, date.getHours() - это часы (от 0 до 23), date.getMinutes() - минуты, date.getSeconds() - секунды, date.getDate() - номер дня месяца, date.getMonth() - месяц, причём, с нумерацией от 0 до 11, date.getFullYear() - 4-значный год, date.getDay() - день недели (0 - Вс, ..., 6 - Сб), есть и другие методы.

Не надо пользоваться функциями вроде date.toLocaleString(), чтобы не зависеть от локали. Лучше вытащить из даты нужные поля "вручную", как в показанном ниже листинге.

4. Сформировать дату и/или время так, как Вам удобно, и засунуть в документ:

document.getElementById('clock').innerHTML = '...';

5. Обеспечить повторный вызов функции через одну секунду с помощью стандартного метода setTimeout

Вот соответствующий код в листинге и в работе:

<span id="clock"></span>
<script type="text/javascript">
function clock() {
 var date = new Date();
 var hour=date.getHours();
 var minute=date.getMinutes();
 var sec=date.getSeconds();
 var day=date.getDate();
 var month=date.getMonth();
 var year=date.getFullYear();
 var weekday=date.getDay();
 var monthes=new Array ('января','февраля','марта','апреля','мая','июня',
  'июля','августа','сентября','октября','ноября','декабря');
 var dayNames = new Array('Воскресенье','Понедельник','Вторник','Среда','Четверг','Пятница','Суббота');
 document.getElementById('clock').innerHTML = '<font size="1">'+dayNames[weekday]+', '+day+' '+monthes[month]+' '+
  year+' года</font><br>'+(hour<10?'0':'')+hour+':'+(minute<10?'0':'')+minute+':'+(sec<10?'0':'')+sec;
 window.setTimeout('clock()',1000);
}
clock();
</script>
<noscript>Извините, Javascript выключен</noscript>

Функцию setInterval вместо setTimeout использовать не надо - может тупо завесить некоторые браузеры вроде ИЕ8 и младше. Кроме того, рекурсивный вызов setTimeout всегда лучше, чем setInterval там, где нужна фиксированная пауза между выполнениями. Просто регулярнее выполняется :)

Конечно, можно не обновлять весь вывод каждую секунду, а проверять, не пора ли это сделать - но это как раз усложнит код дополнительными проверками :)

28.06.2013, 00:36 [17259 просмотров]


теги: javascript время

показать комментарии (2)