За последние 24 часа нас посетили 56838 программистов и 1750 роботов. Сейчас ищут 782 программиста ...

Появление объекта по времени сервера

Тема в разделе "JavaScript и AJAX", создана пользователем Econaft, 29 июн 2014.

  1. Econaft

    Econaft Активный пользователь

    С нами с:
    28 июн 2014
    Сообщения:
    89
    Симпатии:
    1
    Как сделать появление объекта (например просто текста) на странице в заданное время по серверу?
    Например в 15.00 по времени сервера?

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

    Разумеется, что с перезагрузкой всё просто:
    Код (Text):
    1. if (date("H") == 15)
    2. {
    3. echo "Появление текста";
    4. }
    Но нужно, чтобы это было без перезагрузки.

    Как сделать?
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    хорошо тому, кому всё кажется просто )))

    15:55, например, тоже попадает в это условие. а 16:05 уже не попадает. уточни что именно требуется для задачи:

    - "любое открытие страницы сегодня между 15:00 и 16:00" или

    - "любое открытие страницы сегодня после 15:00" или

    - "один раз для данного посетителя, но не ранее, чем в 15:00"

    реши это для обычной страницы, затем добавишь "пингующий" таймер на JS и используешь это же решение на стороне сервера
     
  3. Econaft

    Econaft Активный пользователь

    С нами с:
    28 июн 2014
    Сообщения:
    89
    Симпатии:
    1
    Задача:
    появление текста на странице без её перезагрузки. Т.е. например 20 пользователей уже находятся на определённой странице (допустим чата) и для всех для них появляется в 15.00 объявление. Даже если на один час, это не важно. Главное чтобы оно появилось без перезагрузки чата.
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    перезагрузка не имеет значения, если ты будешь думать про данные, а не про внешнее представление.

    твой чатик обновляет кусок страницы раз в N секунд. если сформулируешь условие неправильно, в течении часа ты получишь 100500 одинаковых сообщений — так понятно?

    Добавлено спустя 2 минуты 18 секунд:
    и, б*, совершенно не факт, что обновление произойдет РОВНО в 15:00, поэтому стоит подумать над правильной формулировкой условия.
     
  5. Econaft

    Econaft Активный пользователь

    С нами с:
    28 июн 2014
    Сообщения:
    89
    Симпатии:
    1
    Не в окне чата.
    А просто в произвольном месте страницы.
    Чат - это я для примера, чтобы было понятно, что это страница, на которой находятся много пользователей.
    И в определённый момент времени появляется сообщение (текст, всплывающее окно - не важно что).

    Я не знаю как сделать без перезагрузки страницы. С перезагрузкой - всё просто и понятно.
     
  6. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
  7. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.818
    Симпатии:
    1.333
    Адрес:
    Лень
    Econaft, ты не видишь реальной проблемы с которой столкнешься. Тебе люди что говорят? может капсом дойдет... 15 ЧАСОВ НАСТУПИЛО А НА ТВОЙ САЙТ НИКТО НЕ ЗАШЕЛ. ДАЛЬШЕ 15:01 пошло, твое обновление в *ОПЕ потому что прое...о твое ровно 15:00
     
  8. Econaft

    Econaft Активный пользователь

    С нами с:
    28 июн 2014
    Сообщения:
    89
    Симпатии:
    1
    Я говорю про задачу когда на одной транице УЖЕ НАХОДЯТСЯ посетители. Как не зашёл никто?
     
  9. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    Ну вот прикинь, небыло никого в 15:00. Или по невъебенным форс-мажорным обстоятельствам ровно в 15:00 связи с сервером небыло.
    А в 15:30 кто-то пришел/восстановился/обновил страницу. Твои действия?
     
  10. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    viewtopic.php?f=16&t=49032&p=389744#p389743
    повторю без знака вопроса:
    Вместо 10000 подставь количество оставшихся секунд, помноженных на 1000.

    По-моему, правильней, если будет всплывать в диапазоне времени. Тогда, в сессиях нужно хранить статус окна, открывалось ли оно в этом диапазоне ранее.
     
  11. Econaft

    Econaft Активный пользователь

    С нами с:
    28 июн 2014
    Сообщения:
    89
    Симпатии:
    1
    Всё сказано первом посте этой темы.
    Когда юзер заходит на страницу (один раз то он в любом случае заходит) ему выдаётся время сервера (не локальное).
    И уже от этого времени идёт отсчёт. В итоге, когда бы кто бы незашёл - ему даётся время сервера. И в окончательном итоге объект всем появляется в одно время по времени сервера.

    Добавлено спустя 4 минуты 52 секунды:
    Не нужны сесии.
    Просто элементарно и тупо нужно открыть всем по времени сервера, например в 15.00.
    В первом посте это дано с реализацией с перезагрузкой окна. Но мне нужно чтобы без перезагрузки.

    Можно на примере, как это сделать? Т.е. узнать оставшиеся секунды?
     
  12. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    ясно. буквы потрачены зря.

    https://www.google.ru/search?q=javascript+show+time+left

    Добавлено спустя 9 минут 32 секунды:
    раз ты считаешь, что с php-частью ты разобрался, дело только за "обновлением без перезагрузки" — перемещаю тему в "JavaScript и AJAX"

    (и в личный игнор тебя)
     
  13. Econaft

    Econaft Активный пользователь

    С нами с:
    28 июн 2014
    Сообщения:
    89
    Симпатии:
    1
    хозяин - барин
     
  14. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Да, просто на сервере на php узнаёшь оставшиеся секунды,
    Код (PHP):
    1. $tm = time();// текущее время
    2. $now_year = (int)date('Y',$tm);// год
    3. $now_month = (int)date('m',$tm);// месяц
    4. $now_day = (int)date('d',$tm);// день
    5. $tm2 = mktime(15, 0, 0, $now_month, $now_day, $now_year);// время окна, сего дня в 15:00:00
    6. $timeleft = $tm2 - $tm;// осталось секунд до 15:00:00   
    выводишь в том месте документа, где стоит JS функция
    Код (PHP):
    1. <script>
    2. <?php
    3. if($timeleft>=0){// если открыли страницу до 15:00:00, выводим JS ниже
    4. ?>
    5. setTimeout(function(){$('.web').fadeIn('fast')}, <?php echo $timeleft ?>000);// 000 для миллисекунд
    6. <?php } ?>
    7. </script>
     
  15. Econaft

    Econaft Активный пользователь

    С нами с:
    28 июн 2014
    Сообщения:
    89
    Симпатии:
    1
    YSandro

    Спасибо, то что надо!
     
  16. kamael

    kamael Новичок

    С нами с:
    29 июн 2014
    Сообщения:
    9
    Симпатии:
    0
    Всем стоять.

    А пользователь может перевести часы.
    А у пользователя другой регион.(часовой пояс).
    А у пользователя отключен JS/

    И всё!

    Вариант - решение грамотное.
    Проверку делать на сервере, с заданным часовым поясом.!!!
    Второе - проверку включенности JS у юзера.
    Третье - передача HEAD каждую минуту.(передача вроде копеешьная... но она так же проверит - а открыт ли у пользователя браузер, а активна ли вкладка(если нет то лучше на неё переключить.))

    Я незнаю. Может позновато ответил. Но на будущее - если кто так залетит с поиска - учтут эти важные моменты. (Сам делал модальное окно и статусы менеджеров на сайте... там с этим гемором часовых поясов замучался... )
     
  17. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    kamael, всё правильно (почти). Но ТС вот и такого достаточно.
    JS в чате, как думаешь, может быть выключен? :) Ну если не через мета тег, конечно, обновление, что очень маловероятно.

    Тогда функция setTimeout слетит?
     
  18. Econaft

    Econaft Активный пользователь

    С нами с:
    28 июн 2014
    Сообщения:
    89
    Симпатии:
    1
    При чём тут заданный временной пояс?
    Серверное время у всех будет одинаковое.