我并没有尝试用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 函数 phpmanual 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;
}