Звук будильника в определенное время суток

Идея состоит в том, чтобы подать сигнал тревоги с веб-страницы html / php через телевизор, висевший возле школьной столовой, и попросить учеников помыть руки. Телевизор используется в качестве таблоида для школьных событий и новостей.
Часть кода, которую я использую на этой странице, выглядит следующим образом:

<?php
$hour = date('G');
$day  = date('1..5'); // 1..7 for Monday to Friday

if (($hour >= 11.05  && $hour <= 11.35)  // 5am - 7am
||  ($hour >= 12.15 && $hour <= 12.30) // 10am - 12 noon
||  ($hour >= 21.10 && $hour <= 21.30) // 10am - 12 noon
||  ($day == 1-5)                  // Monday - Friday
) { ?>
<audio src="Audio/sirena.mp3" autoplay="true" loop="loop">
<?php } ?>

Он воспроизводится только после загрузки страницы на сервер и в течение указанного времени. В противном случае, он молчит. И, как ни странно, он играет только на моем домашнем ПК в Chrome / IE / Mozilla и не играет полностью на школьных ПК.
Имейте в виду, что страница автоматически обновляется каждые 5 минут.

Был бы признателен, если бы кто-то дал подсказку на слушателей событий или что-нибудь еще.

0

Решение

Есть несколько проблем с вашим кодом.

В $day = date('1..5');, '1..5' недопустимый формат для date(), Это просто вернет строку 1..5, Ты хочешь date('w'),

date('G') возвращает час в 24-часовом формате, поэтому $date будет строковым представлением целого числа. В вашем if условие, которое вы сравниваете с поплавками. Поскольку все различные временные условия являются различными десятичными числами над одними и теми же целыми числами, $date никогда не будет соответствовать ни одному из них. Например, если время 11:30, $date будет '11', который не между 11.05 а также 11.35, (Очевидно, что ни '10' или же '12'.)

В последней части if состояние, у вас есть || ($day == 1-5), Есть две проблемы с этим. Первый, 1-5 не значит «от одного до пяти»; это значит «один минус пять». И во-вторых, тот факт, что это дополнительный, не вложенный or условие означает, что оно сводит на нет все различные сравнения времени, потому что всякий раз, когда любая часть из or условие верно, то все состояние оценивает как истинное. Если бы это было || ($day >= 1 && $day <= 5)тогда if будет верно весь день с понедельника по пятницу. На самом деле весь день только в четверг.

Я добавил обновленную версию, которая Я думаю будет делать то, что вы хотите (на основе комментариев в вашем коде). Я использовал какой-то странный отступ в if условие, чтобы, надеюсь, показать группировку немного лучше. В основном нужно проверить день а также проверить группу временных условий. Обратите внимание на другой формат времени ('Gi'), который получает часы и минуты в формате, который можно сравнить с целочисленными значениями в if состояние.

$day  = date('w');
$time = date('Gi');

if ( ($day > 0 && $day < 6)                 // Monday - Friday
&& (                                  // AND
($time >= 1105  && $time < 1135)  //   time range 1
||                                //   OR
($time >= 1215 && $time < 1230)   //   time range 2
||                                //   OR
($time >= 2110 && $time < 2130)   //   time range 3
)
)
echo '<audio src="Audio/sirena.mp3" autoplay="true" loop="loop">';
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector