PHP редирект на основе времени и даты - PullRequest
1 голос
/ 07 сентября 2011

Я пытаюсь перенаправить страницу на другую страницу, основываясь на времени и дате.Я хочу, чтобы он переключился в среду с 19:00 до 20:00, а затем в воскресенье с 10:30 до 11:30.

Я смог заставить его работать, хотя отправлял его со 2-й страницы наво-первых, это проблема, с которой я сталкиваюсь.

Вот код, который я использую

<?php
$hour = date('G');
$minute = date('i');
$day = date('w');
$m = $hour * 60 + $minute; // Minutes since midnight.
if(
  $day == 7 // Sunday...
  && $m >= 615 // ... after 10:15…
  && $m <= 700 // ... but before 11:40…
) header("Location: open.php");
else if(
$day == 3 // Wednesday...
  && $m >= 1125 // ... after 18:45…
  && $m <= 1235 // ... but before 20:35…
) header("Location: open.php");

Я пытался переключать номера, но у меня тоже была ошибкаили он не перенаправил.

Ответы [ 3 ]

1 голос
/ 07 сентября 2011

Воскресенье 0, а не 7 ( php date )

w |Числовое представление дня недели | 0 (для воскресенья) через 6 (для субботы)

Это может вызвать ошибку.

0 голосов
/ 18 октября 2017

Лучше всего делать это в сочетании с JavaScript. Проблема в том, что PHP работает на стороне сервера. Поэтому, когда вы получили php-страницу, ваш php-код уже скомпилирован.

В javascript вы можете получить ответ, используя функцию установки времени ожидания

setTimeout(function, milliseconds);

Вы можете рассчитать время, рассчитав разницу между текущей датой и датой, на которую вы хотите выполнить перенаправление.

для перенаправления в javascript используйте следующую функцию

// similar behavior as an HTTP redirect
window.location.replace("http://stackoverflow.com");

// similar behavior as clicking on a link
window.location.href = "http://stackoverflow.com";

Надеялся, что это помогло вам в дальнейшем поиске вашего ответа.

0 голосов
/ 14 мая 2013

Вот несколько вещей, которые я бы попробовал:

Первое, воскресенье == 0, , а не 7 .Суббота == 6. и все остальное между ними как таковое.

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

Используйте date_default_timezone_set () вверху вашего кода.Я нахожусь в центральном времени, поэтому я бы установил

date_default_timezone_set('America/Chicago');

Значение по умолчанию можно изменить в php.ini в строке "date.timezone = America / Chicago", по умолчанию, прежде чем я изменил его где-то вВеликобритания.

Я вижу в комментарии, который вы добавили.

if($day == 7 && $m >= 700 && $day == 3 1125)

отформатирован правильно, с воскресеньем в 0.

if($day == 0 && $m >= 700 && $day == 3 && $m <= 1125)

Я действительно дал вам неправильный ответсначала, но я вижу, что ты пытаешься сделать.Проблема в том, что это будет верно только с воскресенья по среду с 700 - 1125 каждый день .Так что в понедельник в 6:30 это было бы неверно.Оператор if не отформатирован правильно для того, что вы хотите сделать, но вы бы хотели использовать временную метку в своем состоянии.

Чтобы ответить на исходный код.Попробуйте это:

<?php
date_default_timezone_set('/*ENTER YOUR TIME ZONE HERE*/ /*Find it here: http://www.php.net/manual/en/timezones.php*/');
$hour = date('G');
$minute = date('i');
$day = date('w');
$m = $hour * 60 + $minute; // Minutes since midnight.
if(
  $day == 0 // Sunday...
  && $m >= 615 // ... after 10:15…
  && $m <= 700 // ... but before 11:40…
) header("Location: open.php");
else if(
$day == 3 // Wednesday...
  && $m >= 1125 // ... after 18:45…
  && $m <= 1235 // ... but before 20:35…
) header("Location: open.php");

Надеюсь, это решит вашу проблему!

...