Как обновить страницу в определенный день в определенное время в определенном часовом поясе? - PullRequest
4 голосов
/ 08 января 2012

Я занимаюсь разработкой веб-сайта с двумя параллельными трансляциями.Я использовал PHP для отображения времени, когда кнопки должны быть включены и отключены.Теперь мне нужно использовать Javascript для автоматического обновления страницы перед первой трансляцией, перед второй трансляцией и после второй трансляции.Я реализовал следующий скрипт, и он обновляет страницу в данное время, однако он работает не совсем так, как мне нужно.Мне нужно изменить скрипт, чтобы он обновлял страницу по воскресеньям в 19:45, 20:00 и 20:30 только по восточному поясному времени.

Я использую модифицированный скрипт из этого ответа на вопрос

function refreshAt(hours, minutes, seconds) {
var now = new Date();
var then = new Date();

if(now.getUTCHours() > hours ||
   (now.getUTCHours() == hours && now.getUTCMinutes() > minutes) ||
    now.getUTCHours() == hours && now.getUTCMinutes() == minutes && now.getUTCSeconds() >= seconds) {
    then.setUTCDate(now.getUTCDate() + 1);
}
then.setUTCHours(hours);
then.setUTCMinutes(minutes);
then.setUTCSeconds(seconds);

var timeout = (then.getTime() - now.getTime());
setTimeout(function() { window.location.reload(true); }, timeout);
}

Затем я вызываю функцию refreshAt ().

refreshAt(19,45,0); //Will refresh the page at 7:45pm
refreshAt(20,00,0); //Will refresh the page at 8:00pm
refreshAt(20,30,0); //Will refresh the page at 8:30pm

Я не совсем понимаю, как изменить этот скрипт, чтобы в воскресенье реализовывать только обновление для EST.

Ответы [ 5 ]

4 голосов
/ 09 января 2012

Я понял это. Вот сценарий:

function refreshAt(hours, minutes, seconds, day) {
    var now = new Date();
    var then = new Date();
    var dayUTC = new Date();

    if(dayUTC.getUTCDay() == day) {

        if(now.getUTCHours() > hours ||
       (now.getUTCHours() == hours && now.getUTCMinutes() > minutes) ||
        now.getUTCHours() == hours && now.getUTCMinutes() == minutes && now.getUTCSeconds() >= seconds) {
        then.setUTCDate(now.getUTCDate() + 1);
        }

    then.setUTCHours(hours);
    then.setUTCMinutes(minutes);
    then.setUTCSeconds(seconds);


    var timeout = (then.getTime() - now.getTime());
    setTimeout(function() { window.location.reload(true); }, timeout);
    }
}

А потом я просто вызываю функцию refreshAt ():

 refreshAt(20,00,0,1); //Will refresh the page at 8:00pm on Monday UTC or 3:00pm EST
1 голос
/ 19 марта 2012

У меня была такая же проблема, как и у вас. Я создаю сайт, похожий на ваш, и использую PHP для включения и отключения элементов страницы до и после времени трансляции. Ваше решение показалось многообещающим, но в конечном итоге я был недоволен использованием чистого Javascript для перезагрузки страницы. Javascript получает свое время от компьютера клиента, тогда как PHP получает его от сервера, и даже небольшая разница между ними может разрушить всю систему. (то есть страница может обновляться за 30 секунд до того, как PHP включит кнопки, что заставит некоторых зрителей предположить, что все не работает.)

Я решил проблему с помощью PHP, чтобы сообщить функции Javascript, который час, и он работает как шарм. Единственная проблема заключается в том, что он запускается каждый день, а не только в один день недели, но это не беспокоит меня - у пользователей не будет причин просматривать страницу, кроме дня трансляции.

Это все, что вам нужно - я поставил это сразу после тега <body>:

<script type="text/javascript">
setTimeout(function() { window.location.reload(true); }, 1000*<?php 
$then = mktime(15,00,0);
$tomorrow = mktime(15, 00, 0, date("m") , date("d")+1);
$now = time(); 
if ($now > $then) {echo $tomorrow - $now;}
else {echo $then - $now;}?>); </script>
1 голос
/ 08 января 2012

Альтернативным подходом будет использование Pusher .Это сохраняет открытую связь с получением событий.

Включите javascript Pusher:

<script src="http://js.pusher.com/1.11/pusher.min.js"></script>

Привязать к событию pusher "refresh" с помощью этого кода:

var pusher = new Pusher('abc123'); // Get a key when you sign up and replace this
var refreshChannel = pusher.subscribe('refreshing');
refreshChannel.bind('refresh', function(thing) {
  location.reload(true);
});

Затем в 8 вечера (или когда вы захотите) вручную выдать событие pusher на странице панели управления Pusher, и все люди, просматривающие страницу в данный момент, будут перезагружены.

1 голос
/ 08 января 2012
function refreshAt(day, hours, minutes, seconds) 
{
    Date.getDay() = day
...
}

0 - воскресенье, 6 - суббота.

1 голос
/ 08 января 2012

Вы можете добавить тест даже для дня недели, например:

now.getDay() == "Sunday"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...