Перенаправление php на основе времени и даты

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

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

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

<?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"); 

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

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

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

Это может привести к ошибке.

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

Во-первых, воскресенье == 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 каждый день . Так что в понедельник в 630 году это было бы неверно. Оператор 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"); 

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

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

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

 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"; 

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