Jump to content
  • 0

Часы/таймер


Ser_UFL
 Share

Question

Доброе время суток.

Вот возникла необходимость сделать два таймера (динамические часы), которые будут (1) показывать время на сервере с этим приложением и (2) время работы приложения.

Часы должны "идти".

В первом случае вроде всё легко. Но если возможно, то дайте ссылочку на такой уже готовый скриптик.

А вот во втором сложнее. Есть переменная, которую я получаю напрямую; пусть она называется {my.Uptime}. Т.е. её можно вставлять в скрипт в этом же виде

{my.Uptime}

Но эта переменная имет вид ЧЧ:ММ:СС

Надо как-то заставить эту единую переменную "тикать"..

P.S. Для первого скрипта у меня тоже есть переменные:

{my.hour}
{my.min}
{my.sec}

Хотя я так понимаю, это можно отловить как-то так

hours = ndata.getHours();
mins = ndata.getMinutes();
secs = ndata.getSeconds();

Надеюсь на вашу квалифицированную помощь.

Заранее большое спасибо.

Edited by Ser_UFL
Link to comment
Share on other sites

14 answers to this question

Recommended Posts

  • 0
А че надо то? Я ваапче ничего не понял.

Есть переменная. Называйте её как хотите.

Она возвращает значение равное времени работы приложения

ЧЧ:ММ:СС

.

Допустим, приложение работает 15:25:35. Следовательно, {my.Uptime} = 15:25:35 , т.е. не по отдельности часы, минуты и секунды, а именно в таком виде я получаю ЧЧ:ММ:СС.

Мне нужен скриптик, чтобы часы у юзера на странице в браузере начали тикать, начиная с этого времени вперед.

Edited by Ser_UFL
Link to comment
Share on other sites

  • 0

Вот эта ваша переменная {my.Uptime} имеет строковый тип? Если да, то

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<title>tick-tock</title>

<script type="text/javascript">
function tickTock() {
document.getElementById("clock").firstChild.nodeValue = _date.getHours() + ":" + _date.getMinutes() + ":" + _date.getSeconds();
_date.setSeconds(_date.getSeconds() + 1);
}

var myUptime = "15:25:35"; /* <-- это ваша переменная. Как там вы ее получаете?.. */
var hhmmss = myUptime.split(":");
var _date = new Date();
_date.setHours(hhmmss[0]);
_date.setMinutes(hhmmss[1]);
_date.setSeconds(hhmmss[2]);
window.setInterval(tickTock, 1000);
</script>

</head>

<body>
<p id="clock"> </p>
</body>

</html>

Link to comment
Share on other sites

  • 0
Вот эта ваша переменная {my.Uptime} имеет строковый тип? Если да, то

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<title>tick-tock</title>

<script type="text/javascript">
function tickTock() {
document.getElementById("clock").firstChild.nodeValue = _date.getHours() + ":" + _date.getMinutes() + ":" + _date.getSeconds();
_date.setSeconds(_date.getSeconds() + 1);
}

var myUptime = "15:25:35"; /* <-- это ваша переменная. Как там вы ее получаете?.. */
var hhmmss = myUptime.split(":");
var _date = new Date();
_date.setHours(hhmmss[0]);
_date.setMinutes(hhmmss[1]);
_date.setSeconds(hhmmss[2]);
window.setInterval(tickTock, 1000);
</script>

</head>

<body>
<p id="clock"> </p>
</body>

</html>

Ничего не происходит.

Даже если вместо

var myUptime = "{My.Uptime}";

я оставляю так:

var myUptime = "15:25:35";

, то по вызову

<p id="clock"> </p>

получаю собственно только пробел..

P.S. Обязательно ли <script type="text/javascript"> ... </script> должен быть прописан в head или можно непосредственно перед использованием скрипта?

Edited by Ser_UFL
Link to comment
Share on other sites

  • 0
Ничего не происходит.

o_O

Проверяю — работает, причём во всех браузерах. Достаточно просто скопировать код и всё... Точно работает.

Расположение скрипта в данном случае значения не имеет.

P.S. Наличие какого-то начального текста или хотя бы — как у меня — неразрывного пробела в абзаце, в котором выводится время, обязательно!

Edited by Styx
Link to comment
Share on other sites

  • 0
P.S. Наличие какого-то начального текста или хотя бы — как у меня — неразрывного пробела в абзаце, в котором выводится время, обязательно!

Это я понимаю.

Проверяю — работает, причём во всех браузерах. Достаточно просто скопировать код и всё... Точно работает.

И правда, сейчас попробовал просто в сохранить в .htm - работает.. Очень странно. Сейчас буду еще пробовать. Кодировка и/или DOCTYPE ведь не имеют какого-то значения при использовании этого скрипта?

Link to comment
Share on other sites

  • 0

По поводу кодировки — удалите на всякий случай все комментарии. Я дописал их на форуме, а сам документ писал в UTF-8.

DOCTYPE не должен оказывать принципиального влияния на работу данного скрипта.

Link to comment
Share on other sites

  • 0

Сорри, видимо я немного устал..

У меня просто тут особый синтаксис.. И перед такими символами, как : { } / ! ? мне везде надо ставить обратный слеш \

Огромное спасибо за помощь!

P.S. Т.е. Ваш скрипт у меня будет выглядеть примерно так:

<script type="text/javascript">
function tickTock() [color="#FF0000"]\[/color]{
document.getElementById("clock").firstChild.nodeValue = _date.getHours() + "[color="#FF0000"]\[/color]:" + _date.getMinutes() + "[color="#FF0000"]\[/color]:" + _date.getSeconds();
_date.setSeconds(_date.getSeconds() + 1);
}

var myUptime = "{My.Uptime}";
var hhmmss = myUptime.split("[color="#FF0000"]\[/color]:");
var _date = new Date();
_date.setHours(hhmmss[0]);
_date.setMinutes(hhmmss[1]);
_date.setSeconds(hhmmss[2]);
window.setInterval(tickTock, 1000);
</script>

Edited by Ser_UFL
Link to comment
Share on other sites

  • 0

Styx, еще небольшой вопросик..

Допустим, приложение работает 1 час, 9 минут, 7 секунд.

Моя переменная возвращает значение 01:09:07, а при использовании этого скрипта получаем 1:9:7

Помогите дописать Ваш скрипт..

И какой способ более оптимальный:

(Написано для примера. Тонкостей и синтаксиса javascript не знаю, но, думаю, Вы поймете, что я имел ввиду)

if (Hours < 10) {Hours = "0" + Hours }

или

if (Hours.length < 2) {Hours = "0" + Hours }

или же какой-то совершенно другой вариант есть? Ведь всё-таки моя переменная отображает изначально нули.

Edited by Ser_UFL
Link to comment
Share on other sites

  • 0

Можно изменить функцию следующим образом:

function tickTock() {
var timeStr = (_date.getHours() < 10) ? "0" + _date.getHours() : _date.getHours().toString();
timeStr += (_date.getMinutes() < 10) ? ":0" + _date.getMinutes() : ":" + _date.getMinutes();
timeStr += (_date.getSeconds() < 10) ? ":0" + _date.getSeconds() : ":" + _date.getSeconds();
document.getElementById("clock").firstChild.nodeValue = timeStr;
_date.setSeconds(_date.getSeconds() + 1);
}

_____________________

Бррр. Можно проще.

function tickTock() {
var timeStr = _date.toTimeString();
document.getElementById("clock").firstChild.nodeValue = timeStr.slice(0, 8);
_date.setSeconds(_date.getSeconds() + 1);
}

Edited by Styx
Link to comment
Share on other sites

  • 0

Здавствуйте.

Сложилось, так, что появился еще вопрос аналогичный тому, что стал причиной этого топика..

Опять же есть строковая переменная вида:

МИНУТЫ:СЕКУНДЫ

Нужно сделать скрипт аналогичный этому:

<script type="text/javascript">
function tickTock() {
var timeStr = _date.toTimeString();
document.getElementById("timeleft").firstChild.nodeValue = timeStr.slice(0, 8);
_date.setSeconds(_date.getSeconds() - 1);
}
var myUptime = "{My.Timeleft}";
var hhmmss = myTimeleft.split(":");
var _date = new Date();
_date.setHours(hhmmss[0]);
_date.setMinutes(hhmmss[1]);
_date.setSeconds(hhmmss[2]);
window.setInterval(tickTock, 1000);
</script>

Таймер должен быть обратный (уменьшение времени). Но проблема заключается в том, что у меня в переменной нет ЧАСОВ, только МИНУТЫ:СЕКУНДЫ. А нужно, чтобы время показывалось ЧЧ:ММ:СС. И вот как бы так сделать, чтобы если МИНУТ >= 60, то эти 60 минут превращались в 01 час и так далее.. (например, если 600 минут, то 10 часов)..

Заранее опять же спасибо!

Edited by Ser_UFL
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy