I have a database table with columns ‘name’ (of an event) and ‘day’ (in full, so: ‘Monday, ‘Tuesday’ etc). In a while loop displaying an event followed by its day in brackets is quite straightforward.
Is there a way to systematically substitute each day for the date that that day falls on next? So Monday would be 11 Jun, Tuesday would be 12 Jun, etc.
I’ve tried something along these lines, but the variable stays the same for each row of ‘name’ – retrospectively this makes sense.
$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
Here’s what I now have:
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>";
}
}
}
You can use strtotime() to get this, for example:
You would then use date() to convert it to a string (such as 12 Jun):
Also if the event is today and you want it to display the current date you’d add some checking code, so all together as a function: