2012-06-11 4 views
1

У меня есть таблица базы данных с именем столбца (события) и «день» (в полном объеме, так: «Понедельник,« Вторник »и т. Д.). В цикле while, отображающем событие, за которым следует его день в скобках, довольно просто.Подставляя значения из полей MySQL при печати в PHP

Есть ли способ систематически подставлять каждый день на дату, когда этот день выпадает на следующий? Так что в понедельник будет 11 июня, вторник - 12 июня и т. Д.

Я пробовал что-то в этих строках, но переменная остается неизменной для каждой строки 'name' - ретроспективно это имеет смысл.

$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>"; 

EDIT

Вот что у меня теперь есть:

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>"; 

      }   
    } 
} 

ответ

2

Вы можете использовать strtotime(), чтобы получить это, например:

$date = strtotime('next tuesday'); 

Вы бы затем использовать date(), чтобы преобразовать его в строку (например, 12 июня):

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); 
    } 
} 
+0

Спасибо за ваш ответ. Как это соответствует моему коду? Не нужно ли быть каким-то массивом, чтобы он не давал одинаковое значение для каждого события, которое было напечатано в выпадающем списке? – Sebastian

+0

Когда вы повторяете все свои даты, в своем выражении эха вы просто измените его на это: «echo» "; ' – Timm

+0

Это имеет смысл, спасибо большое. Только одно: не будет ли getDateString ($ row ['day'])? – Sebastian

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); 
} 
Смежные вопросы