1

我有一个数据库表,其中包含“名称”(事件)和“日”(完整,所以:“星期一,'星期二'等)。在while循环中显示一个事件,然后在括号中显示其日期是非常简单的。

有没有办法系统地将每一天替换为下一天的日期?所以星期一是 6 月 11 日,星期二是 6 月 12 日,以此类推。

我已经尝试过这些方面的东西,但是对于“名称”的每一行,变量都保持不变——回想起来,这是有道理的。

$today = date("l");
$todays_date = date("j M");

if ($row['day'] == $today) {
    $date = $todays_date;
    }

else if (day == date("l", strotime("+1 day")) {
    $date = date("j M", strotime("+1 day"));
    }

echo "<option>" . $row['name'] . " (" . $date . ")</option>";

编辑

这是我现在拥有的:

function getClubs() {
connect();

date_default_timezone_set('Europe/London');

$day = date("l");
$time = date("G");

if ($time >= 21) {
    $day = date('l', strtotime($day .' +1 day'));
    }


if ($day == Monday) {
    $query = "SELECT * FROM nights WHERE city = 'Cambridge' ORDER BY FIELD(day, 'MONDAY', 'TUESDAY', 'WEDNESDAY', 'THURSDAY', 'FRIDAY', 'SATURDAY', 'SUNDAY')";
    }

else if ($day == Tuesday) {
    $query = "SELECT name FROM nights WHERE city = 'Cambridge' ORDER BY FIELD(day, 'TUESDAY', 'WEDNESDAY', 'THURSDAY', 'FRIDAY', 'SATURDAY', 'SUNDAY', 'MONDAY')";
    }

else if ($day == Wednesday) {
    $query = "SELECT name FROM nights WHERE city = 'Cambridge' ORDER BY FIELD(day, 'WEDNESDAY', 'THURSDAY', 'FRIDAY', 'SATURDAY', 'SUNDAY', 'MONDAY', 'TUESDAY')";
    }

else if ($day == Thursday) {
    $query = "SELECT name FROM nights WHERE city = 'Cambridge' ORDER BY FIELD(day, 'THURSDAY', 'FRIDAY', 'SATURDAY', 'SUNDAY', 'MONDAY', 'TUESDAY', 'WEDNESDAY')";
    }

else if ($day == Friday) {
    $query = "SELECT name FROM nights WHERE city = 'Cambridge' ORDER BY FIELD(day, 'FRIDAY', 'SATURDAY', 'SUNDAY', 'MONDAY', 'TUESDAY', 'WEDNESDAY', 'THURSDAY')";
    }

else if ($day == Saturday) {
    $query = "SELECT name FROM nights WHERE city = 'Cambridge' ORDER BY FIELD(day, 'SATURDAY', 'SUNDAY', 'MONDAY', 'TUESDAY', 'WEDNESDAY', 'THURSDAY', 'FRIDAY')";
    }

else if ($day == Sunday) {
    $query = "SELECT name FROM nights WHERE city = 'Cambridge' ORDER BY FIELD(day, 'SUNDAY', 'MONDAY', 'TUESDAY', 'WEDNESDAY', 'THURSDAY', 'FRIDAY', 'SATURDAY')";
    }


    $result = mysql_query($query);
    $items = array();

    if($result && mysql_num_rows($result) > 0) { 
        while ($row = mysql_fetch_array($result)) { 
//          $items[] = array($row['name']);

$day = $row['day'];

function getDateString($day){
    if (date("l")==$day){
        return date("j M");
    }
    else {
        $date = strtotime("next $day");
        return date("j M",$date);
    }
}

            echo "<option>" . $row['name'] . " (" . getDateString($row['day']) . ")</option>";

            }         
    }
}
4

2 回答 2

2

您可以使用strtotime()来获取此信息,例如:

$date = strtotime('next tuesday');

然后,您将使用date()将其转换为字符串(例如 12 Jun):

date("j M",$date);

此外,如果事件是今天,并且您希望它显示当前日期,您将添加一些检查代码,因此所有这些都作为一个函数:

function getDateString($day){
    if (date("l")==$day){
       return date("j M");
    } else {
       $date = strtotime("next $day");
       return date("j M",$date);
    }
}
于 2012-06-11T12:30:09.703 回答
0

$dayDates如果$beginDate是星期一,这会将日期置于星期一。这是你想要的?

$daysoftheweek = array(0 => 1);

while($beginDate <= $endDate)
{
    if(in_array(date('N', $beginDate), $daysOfTheWeek))
    {
        $dayDates[] = date('Y-m-d', $beginDate);
    }

    $beginDate = strtotime("+1 day", $beginDate);
}
于 2012-06-11T12:27:50.593 回答