Каков наилучший способ сделать что-то, например, вставить элемент в определенное время дня? я должен использовать setTimeout () OS есть лучший способ сделать это?

2
Sina Fathieh 30 Июл 2010 в 04:39

3 ответа

Лучший ответ

SetTimeout () и setInterval () оба выполняют синхронизированные операторы js относительно того, когда они были загружены, а не в определенное время каждый день, поэтому они не кажутся чистым решением. Вы можете добавить немного сценариев на стороне сервера. Некоторые случайные решения вырваны из моего усталого мозга:

  • Просто оберните элемент html в условный оператор (php, python и т. Д.), Который выполняется только в определенный момент времени.
  • Есть элемент на странице, но установите его для отображения: нет. Используйте php, чтобы добавить класс / стиль в определенное время, который переопределяет атрибут отображения.
  • Опять же, используйте php для добавления класса, но на этот раз добавьте элемент в DOM с помощью js, используя новый класс в качестве идентификатора расположения нового элемента.

Очевидно, не очень хорошо, если вы хотите сохранить все на стороне клиента ... :)

< Сильный > ИЗМЕНИТЬ Чтобы выполнить оператор в php между 13:00 и 14:00 каждый день (непроверенный):

$now = date('G',time());
$start = 13;
$end = 14;
if($now >= $start && $now <= $end){ 
    //do something
}
0
Mathew 30 Июл 2010 в 01:01

Сначала решите, должно ли это происходить на стороне клиента или сервера. Вы не предоставили достаточно информации, чтобы определить это, но так как вы пометили этот Javascript, я предполагаю, что на стороне клиента это лучший способ.

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

Вот пример:

Проверяйте каждую минуту и показывайте DIV (с ID , равным target) с уже существующим контентом, только когда это происходит после 13:59 и до 18:00 (в часовом поясе пользователя) :

setTimeout ( function(){

  var hour = (new Date()).getHours();
  if (hour>1 && <6) {
    document.getElementById('target').style.display = "block";
  } else {
    document.getElementById('target').style.display = "none";
  }

}, 60000 );

Конечно, вы можете изменить его, чтобы использовать createElement для вставки нового DIV, а также сделать AJAX-запрос на получение контента и т. Д., Но это ваше дело.

2
donohoe 10 Май 2012 в 21:41

SetInterval () лучше для этого. Но не устанавливайте интервал на 24 часа или что-то еще. Установите его, чтобы проверять время каждую минуту или около того, и если новый Date () больше, чем желаемое время дня, запустите функцию вставки элемента.

1
Robusto 30 Июл 2010 в 00:41