Using timestamps and arrays now, made some good progress...
PHP Code:
<table width="100%" cellspacing="0" cellpadding="3" style="border:2px solid #ddeeff;">
<tbody style="color:#225C77;font-size:13px;">
<?php
include '../db.php';
$sql = mysql_query("
SELECT *,
date_format(act_start, '%d') as start_day,
date_format(act_start, '%m') as start_month,
date_format(act_start, '%Y') as start_year,
date_format(act_end, '%d') as end_day,
date_format(act_end, '%m') as end_month,
date_format(act_end, '%Y') as end_year
FROM holidays");
$i = 0;
while ($row = mysql_fetch_array($sql)) {
$act_id = $row['act_ID'];
$staff_id = $row['staff_id'];
$sql2 = mysql_query('SELECT firstname FROM engineers WHERE id="'.$staff_id.'" LIMIT 1;');
while ($row2 = mysql_fetch_array($sql2)) {
$firstname[] = $row2['firstname'];
}
$act_title[] = $row['act_title'];
$act_desc[] = $row['act_desc'];
$start_day[] = $row['start_day'];
$start_month[] = $row['start_month'];
$start_year[] = $row['start_year'];
$end_day[] = $row['end_day'];
$end_month[] = $row['end_month'];
$end_year[] = $row['end_year'];
$act_status[] = $row['act_status'];
$holidays_start[] = mktime(0, 0, 0, $start_month[$i], $start_day[$i], $start_year[$i]);
$holidays_end[] = mktime(0, 0, 0, $end_month[$i], $end_day[$i], $end_year[$i]);
$i++;
}
$num_elements=count($act_title);
for ($i=0; $i < $num_elements; $i++) {
echo $firstname[$i] . $holidays_start[$i] . ' - ' . $holidays_end[$i] .'<br>';
}
$month = 1;
$year = date("Y");
$bgcolor = "#999999";
echo '<tr><td bgcolor="#225C77" width="5%"><strong style="color:#FFFFFF;"><center>'.$year.'</center></strong></td>';
$rownumber = 1;
while ($rownumber <= 31) {
echo '<td width="3%"><center>'.$rownumber.'</center></td>';
$rownumber++;
}
echo '</tr>';
while ($month <= 12) { if($bgcolor == "#EEF5FF"){$bgcolor = "#DDEEFF";} else {$bgcolor = "#EEF5FF";}
$daysinmonth = date("t", mktime(0, 0, 0, $month, 1, $year));
$monthname = date("M", mktime(0, 0, 0, $month, 1, $year));
echo '<tr bgcolor="'.$bgcolor.'"><td width="5%">' . $monthname . '</td>';
$rownumber = 1;
while ($rownumber <= $daysinmonth) {
$todaysdate = mktime(0, 0, 0, $month, $rownumber, $year);
$num_elements=count($act_title);
for ($i=0; $i < $num_elements; $i++) {
if($todaysdate >= $holidays_start[$i] AND $todaysdate <= $holidays_end[$i]) {
echo '<td width="3%" style="font-size:9px;color:#FFFFFF;" bgcolor="#DD5555"><center>'.$firstname[$i].'</center></td>';
} else {
echo '<td width="3%"> </td>';
}
$rownumber++;
} // end for
}
echo '</tr>';
$month++;
}
?>
</tbody>
</table>
and the database..
Code:
act_ID staff_id act_title act_desc act_start act_end
1 1 Holiday Holiday in Jamaica 2007-06-06 00:00:00 2007-06-20 00:00:00
3 5 Holiday Going to Miami 2007-08-01 00:00:00 2007-08-15 00:00:00
The result
As you can see from the result, there is a problem with my for() loop which causes that weird gap between each red <td>. I need a way to stop the "else" part from happening but it's hard because each holiday is at different times.. Hope you get what I'm saying!
Bookmarks