Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Время и дата, обновление в онлайне (https://javascript.ru/forum/dom-window/2213-vremya-i-data-obnovlenie-v-onlajjne.html)

Jex 20.11.2008 00:34

Время и дата, обновление в онлайне
 
Всем привет!
Помогите сделать так, чтобы шло обновление времени каждую секунду, например.
<SCRIPT LANGUAGE="JavaScript">

        var now = new Date();
        var hours = now.getHours();
        var minutes = now.getMinutes();
	var seconds = now.getSeconds();
        var timeValue = "" + ((hours >24) ? hours -24 :hours)
        timeValue += ((minutes < 10) ? ":0" : ":") + minutes
        timeValue += ((seconds < 10) ? ":0" : ":") + seconds
	timerRunning = true;
 
      mydate = new Date();
      myday = mydate.getDay();
      mymonth = mydate.getMonth();
      myweekday= mydate.getDate();
      weekday= myweekday;
      myyear= mydate.getYear();
      year = myyear
 
	if  (year <  2000)   
	year = year + 1900; 
      if(myday == 0)
              day = " Воскресенье, "      
       else if(myday == 1)
            day = " Понедельник, "
       else if(myday == 2)
              day = " Вторник, "   
       else if(myday == 3)
              day = " Среда, "   
       else if(myday == 4)
              day = " Четверг, "
       else if(myday == 5)
              day = " Пятница, "
       else if(myday == 6)
              day = " Суббота, "
       if(mymonth == 0)
               month = "Января "
       else if(mymonth ==1)
               month = "Февраля "
       else if(mymonth ==2)
              month = "Марта "
       else if(mymonth ==3)
             month = "Апреля "
       else if(mymonth ==4)
               month = "Мая "
       else if(mymonth ==5)
               month = "Июня "
       else if(mymonth ==6)
               month = "Июля "
       else if(mymonth ==7)
             month = "Августа "
       else if(mymonth ==8)
            month = "Сентября "
       else if(mymonth ==9)
           month = "октября "
       else if(mymonth ==10)
           month = "Ноября "
       else if(mymonth ==11)
           month = "Декабря"

      document.write("<P ALIGN=RIGHT><FONT SIZE=1 FACE=ARIAL>" + timeValue + " | " +day + month);
      document.write(myweekday+","+ " " + year + "</FONT></p>");


 </SCRIPT>



Я пытался текст в теле поместить в функцию а ля
function show(){
...
setTimeout("show()",1000)
}
window.onload=show

но не помогло.

Zibba 20.11.2008 01:20

в функции вместо document.write(); используйте document.getElementById().innerHtml = ""; , ну и вешайте на таймер как Вы и сказали.

Получится что то типа:

document.getElementById("time").innerHTML='<span id="time">'+timeValue+' | '+day+myweekday+' '+month+', '+year+'</span>';


Ну и в документ соответственно добавьте <span id="time"></span>

P.S. Вместо множественного ветвления в Вашем случае было бы красивее использовать switch ;)

Octane 20.11.2008 01:36

Пока писал, Zibba уже ответил)))

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script type="text/javascript">
var datetime = {
	month: ['Января', 'Февраля', 'Марта', 'Апреля', 'Мая', 'Июня', 'Июля', 'Августа', 'Сентября', 'Октября', 'Ноября', 'Декабря'],
	day: ['Воскрсенье', 'Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота'],
	show: function(node) {
		var _this = this;
		setInterval(function() {
			var date = new Date();
			node.innerHTML = [_this.day[date.getDay()], ', ', date.getDate(), ' ', _this.month[date.getMonth()], ' ', date.getFullYear()].join('');
		}, 1000);
	}
};

window.onload = function() {
	datetime.show(document.getElementById('date'));
};
</script>
</head>

<body>
	<div id="date"></div>
</body>
</html>

Вывод времени не стал делать, думаю сами догадаетесь как сделать. Метод «getFullYear» не работает вроде бы только в старых версиях «Mozilla», которые уже не актуальны, поправьте если ошибаюсь.

Kolyaj 20.11.2008 07:56

При создании часов нельзя ставить таймаут в одну секунду, т.к. реально он будет больше. В результате секунды будут идти неровно.

Zibba 20.11.2008 10:48

Спасибо, не знал. А какое тогда оптимаьлное время для одной секунды? Или будет зависеть от кода скрипта?

Kolyaj 20.11.2008 11:48

Цитата:

Сообщение от Zibba
А какое тогда оптимаьлное время для одной секунды?

1 миллисекунда.

ZoNT 20.11.2008 12:09

1 миллисекунда - это слишком часто... Я ставил 100 - нормально. То есть время таймера - это максимальная погрешность на которую может отклонится отрисовка... Если ты человек-часы и сможешь отличить 0,9 секунды от 1,1 секунды, то ставь погрешность меньше...

Везде принимается за визуальный лаг 300мс, так что +-100 (=200) меньше общепринятого.


Часовой пояс GMT +3, время: 14:40.