如果服务器日期/时间介于两个时间值之间,PHP 显示事件


php show event if server date/time is between two time values

我并没有尝试用MySQL做到这一点,因为我看到这很常见。我只是尝试创建一个PHP脚本,该脚本将使用服务器时间和日期作为参考来显示这样的信息:

Monday 2:30am to Tuesday 2:29am - Content A
Tuesday 2:30am to Wednesday 2:29am - Content B
Wednesday 2:30am to Thursday 2:29am - Content C
and so on....

直到一周中的每一天都被覆盖,出于某种原因,我似乎无法确定这一点,似乎没有和示例可以构建。这是由于某种原因不可能吗?


编辑


我使用了以下代码,事实证明它并不像应有的那样可靠。

function isInTimeWindow($dayName, $startHour, $startMinute, $endHour, $endMinute) 
{ 
   $dayName = ucfirst($dayName); 
   list($dayNow, $timeNow) = explode('|', date('l|Hi')); 
   return ( 
      ucfirst($dayName) == $dayNow and 
      $timeNow >= sprintf('%02d%02d', $startHour, $startMinute) and 
      $timeNow <= sprintf('%02d%02d', $endHour, $endMinute) 
   ); 
} 
// tuesdays during day 
if(isInTimeWindow('tuesday', 02, 30, 23, 00)) { 
?>
CONTENT
<?php } ?>

您可以使用date(l) php manual date()函数函数以单词形式获取实际的工作日(星期一,星期二,...),以便您可以检查工作日。

使用 mktime 函数 php

manual mktime() 函数将您的时间(例如星期一,凌晨 2:30)转换为时间戳,并使用时间函数 php 手动 time() 函数检查它是否在当前时间之间

编辑:这是一个示例:

$today_start = mktime(2, 30, 0, date('m'), date('d'), date('Y'));
$today_end = mktime(2, 29, 0, date('m'), (date('d') + 1), date('Y'));

if ( $today_start < time() && $today_end > time() )
    // code

mktime的工作原理是这样的: mktime( 小时, 分钟, 秒, 月, 天, 年 )

只要你对使用服务器的时间而不是客户端的时间感到满意,就可以使用 getdate() 函数来完成。

例如,如果您只想根据星期几执行此操作:

<?php
$now = getdate();
switch($now['wday']) {
case 0:
?>
Content A
<?
break;
etc.

编辑:这是更详细地执行此操作的方法:

getdate() 也为您提供有关小时和分钟部分的信息。

你可以有一个这样的函数:

// Get's the 0-indexed day of the week offset so each "day" starts and 2:30am
function get_offset_day() {
    $now = getdate();
    if ($now['hours']*60 + $now['minutes'] < 150) { // less 2h 30m after midnight => still "yesterday"
        $answer = $now['wday']-1;
    }
    else {
        $answer = $now['wday'];
    } 
    if ($answer < 0) return 6;
    return $answer;
}