在一天中的某个时间发出警报声

时间:2016-10-13 18:23:59

标签: php html audio alarm

这个想法是通过挂在学校食堂附近的电视机从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分钟自动刷新一次。

如果有人对事件监听器或其他任何事情进行了暗示,我们将不胜感激。

1 个答案:

答案 0 :(得分:0)

您的代码存在一些问题。

$day = date('1..5');中,'1..5'不是date()的有效格式。那只会返回字符串1..5。你想要date('w')

date('G')以24小时格式返回小时,因此$date将是整数的字符串表示形式。在if条件下,您将其与浮点数进行比较。由于所有不同的时间条件都是高于相同整数的各种小数,$date将永远不会匹配它们中的任何一个。例如,如果时间是上午11:30,则$date将为'11',而不是11.0511.35之间。 (显然,'10''12'都没有。)

if条件的最后一部分,您有|| ($day == 1-5)。这有两个问题。首先,1-5并不意味着&#34;在1到5之间&#34; ;它意味着&#34;一减五&#34; 。第二,这是一个额外的非嵌套or条件这一事实意味着它会否定所有不同的时间比较,因为每当 or条件的任何部分时是的,整个条件的计算结果为true。如果是|| ($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">';