За последние 24 часа нас посетили 21356 программистов и 1698 роботов. Сейчас ищут 1878 программистов ...

JS-часики

Тема в разделе "JavaScript и AJAX", создана пользователем Elkaz, 10 мар 2008.

  1. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    Здравствуйте.
    Нужно сделать простенькие JS-часики. Честно говоря, знаю что это не сложно. Но что-то у меня не сложилось с определением времени.
    Нужно что бы в <div id='myTimer'> было текущее время. И время это бралось из значения времени сервера, а не компьютера пользователя. Как это можно простенько реализовать? :)

    Знаю что нужно написать ф-ию с использованием setTimeout(), которая бы каждую секунду выводила эту самую дату. Далее при помощи innerHTML записываем ее в контейнер.

    Спасибо.
     
  2. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    когда писал - работало )
    [js]
    var dateobj = new Date ();
    var servertime = <?php echo mktime()*1000; ?>;
    var clienttime = dateobj.getTime();
    var raznica = servertime - clienttime;
    function timer(raznica) {
    dateobj = new Date ();
    correct = dateobj.getTime() + raznica;
    dateobj.setTime(correct);
    hour = dateobj.getHours();
    minute = dateobj.getMinutes();
    sec = dateobj.getSeconds();
    document.getElementById("dosya").innerHTML = hour+":"+minute+":"+sec;
    setTimeout("timer("+raznica+")", 1000);
    }
    timer(raznica);[/js]
     
  3. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    Kreker
    Все отлично, спасибо.
    Правда в форматах js-часов я не очень.
    Как сделать, что бы к
    hour min sec прибавлялся 0, если значение меньше 9.
    Пока сделал так

    if (hour <= 9) hour = '0' + hour;
    ...
     
  4. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Кстати, нашел такую финтифлюшку:
    Т.е не обязательно возиться с разницей, достаточно просто впихнуть серверное время при задании объекта)

    Насчет нулей - скорей всего так.

    Описание объекта date и его методов здесь - http://www.r22.ru/docs/1-prg/JavaScript/date.html
     
  5. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Client-side часики я делаю так (c) vladson.com
    HTML:
    1. <p id="clock">&nbsp;</p><script type="text/javascript">function this_time(asd){document.getElementById("clock").innerHTML = new Date();}self.setInterval("this_time()",100);</script>
    Как прикрутить их на работу с временем сервера смотри в примере Kreker
     
  6. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    Vladson
    :) Перенос строки специально не пишем? ;-) Запутать наглых воришек?
     
  7. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Нет, просто на момент написания так было удобнее
     
  8. Anonymous

    Anonymous Guest

    1000 мс == 1 секунда == логичней
     
  9. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Логичнее не забивать себе голову такими вопросами, работает и фиг с ним
    (это не то место где надо придираться, тут допуск +/- трамвайная остановка в полне допустим)
     
  10. Anonymous

    Anonymous Guest

    фигасе, 10 тактов в секунду в сравнении с 1м тактом в секунду - сравнимо. Один такт в секунду для секундомера на порядок логичней, чем 10 )
     
  11. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Блин. Парился с часами, отдельно получая часы, минуты, секунды. Делал двухзначными. А оказалось все проще - date.toLocaleTimeString()

    Таким образом, скрипт становится таким:

    [js]var dateobj = new Date ();
    var servertime = <?php echo mktime()*1000; ?>;
    var clienttime = dateobj.getTime();
    var raznica = servertime - clienttime;
    function timer(raznica) {
    dateobj = new Date ();
    correct = dateobj.getTime() + raznica;
    dateobj.setTime(correct);
    document.getElementById("dosya").innerHTML = dateobj.toLocaleTimeString();
    setTimeout("timer("+raznica+")", 1000);
    }
    timer(raznica);[/js]
     
  12. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Не помню точно где (в одном из древних браузеров) мой скрипт выдаёт не 10 тактов а 50 :)

    Посмотри setInterval, имхо лучше в данном случае (а то у тебя рекурсия получается, а это не есть гуд)
     
  13. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Vladson
    Спасибо за подсказку. Будем-с юзать :)