Ahh for the fun of it. Gives you something to play around with anyway.
<?php
$hours_array = array("0800-1200", "1200-1600", "1600-2000", "2000-2400");
// Getting Monday's Date
$thisMon = date('Y-m-d',strtotime('Monday this week'));
$thislast = date('Y-m-d', strtotime($thisMon . " + 6 days"));
$nextMon = date('Y-m-d',strtotime('Monday next week'));
$nextlast = date('Y-m-d', strtotime($nextMon . " + 6 days"));
function createDateRangeArray($strDateFrom,$strDateTo){
$aryRange=array();
$iDateFrom=mktime(1,0,0,substr($strDateFrom,5,2), substr($strDateFrom,8,2),substr($strDateFrom,0,4));
$iDateTo=mktime(1,0,0,substr($strDateTo,5,2), substr($strDateTo,8,2),substr($strDateTo,0,4));
if ($iDateTo>=$iDateFrom)
{
array_push($aryRange,date('Y-m-d',$iDateFrom)); // first entry
while ($iDateFrom<$iDateTo)
{
$iDateFrom+=86400; // add 24 hours
array_push($aryRange,date('Y-m-d',$iDateFrom));
}
}
return $aryRange;
}
//Create arrays of dates
$thisweek_dates = createDateRangeArray($thisMon,$thislast);
$nextweek_dates = createDateRangeArray($nextMon,$nextlast);
////////////////////////
/*
$query= " SELECT * from rota WHERE ".$db->nameQuote('employeeNumber')." = ". $db->Quote($employeeNumber)." AND ".$db->nameQuote('scheduleDate')." >= ". $db->Quote($thisMon)." ";
$db->setQuery($query);
$result = $db->query();
while ($row = mysqli_fetch_assoc($result)) {
*/
$emp_hours = array();
$query= " SELECT * from rota WHERE employeeNumber = '$employeeNumber' AND scheduleDate >= '$thisMon' ";
$result = $db->query($query);
while ($row = $result->fetch_array(MYSQLI_ASSOC)){
$date = $row["scheduleDate"];
$start = $row["scheduledClockIn"];
$end = $row["scheduledClockOut"];
$emp_hours[$date]['ClockIn'][] = $start;
$emp_hours[$date]['ClockOut'][] = $end;
}
ksort($emp_hours);
/*
echo "<pre>";
print_r($emp_hours);
echo "</pre>";
*/
$content = "";
/////////////////////////
//////Current Week///////
/////////////////////////
$content .= "<table class=\\"table\\" width=\\"99%\\" cellspacing=\\"1\\" cellpadding=\\"1\\">\\r";
$content .= "<tr>\\r";
$showthisMon = date('F j, Y',strtotime($thisMon));
$showthislast = date('F j, Y',strtotime($thislast));
$content .= "<th align=\\"center\\" colspan=\\"7\\">This Week - $showthisMon - $showthislast</th>\\r";
$content .= "</tr>\\r";
//calendar heading
$content .= "<tr>\\r";
foreach($thisweek_dates as $date){
$day = date('l',strtotime($date));
$showday = date('M j, Y',strtotime($date));
$content .= "<td align=\\"center\\" width=\\"14%\\" class=\\"heading\\"><b>$day</b><br />$showday</td>\\r";
}
$content .= "</tr>\\r";
$content .= "<tr>\\r";
$Tdailyminutes = array();
foreach($thisweek_dates as $date){
$content .= "<td align=\\"center\\" width=\\"14%\\">\\r";
$dailyminutes = 0;
foreach($hours_array as $hour){
$times = explode("-",$hour);
$min = $times[0];
$max = $times[1];
if (array_key_exists($date,$emp_hours)){
//look for ClockIn time within min/max range
foreach($emp_hours[$date]['ClockIn'] as $timein){
if ($timein >= $min && $timein <= $max){
$in = $timein;
break;
}else{
$in = "";
}
}
//look for ClockOut time within min/max range
foreach($emp_hours[$date]['ClockOut'] as $timeout){
if ($timeout >= $min && $timeout <= $max){
$out = $timeout;
break;
}else{
$out = "";
}
}
}
$dailyminutes = $dailyminutes+($out-$in);
$display = (isset($in) && !empty($in) ? "$in - $out" : '');
$content .= "<b>$hour</b><br />$display<br />\\r";
}
$Tdailyminutes[$date] = $dailyminutes;
$content .= "</td>\\r";
}
$content .= "</tr>\\r";
//Total hours
$content .= "<tr>\\r";
foreach($thisweek_dates as $date){
$Thours = $Tdailyminutes[$date]/100;
$content .= "<td align=\\"center\\" width=\\"14%\\" class=\\"heading\\">$Thours hrs</td>\\r";
}
$content .= "</tr>\\r";
$content .= "</table>\\r";
/////////////////////////
////////NextWeek/////////
/////////////////////////
$content .= "<table class=\\"table\\" width=\\"99%\\" cellspacing=\\"1\\" cellpadding=\\"1\\">\\r";
$content .= "<tr>\\r";
$shownextMon = date('F j, Y',strtotime($nextMon));
$shownextlast = date('F j, Y',strtotime($nextlast));
$content .= "<th align=\\"center\\" colspan=\\"7\\">Next Week - $shownextMon - $shownextlast</th>\\r";
$content .= "</tr>\\r";
//calendar heading
$content .= "<tr>\\r";
foreach($nextweek_dates as $date){
$day = date('l',strtotime($date));
$showday = date('M j, Y',strtotime($date));
$content .= "<td align=\\"center\\" width=\\"14%\\" class=\\"heading\\"><b>$day</b><br />$showday</td>\\r";
}
$content .= "</tr>\\r";
$content .= "<tr>\\r";
$Tdailyminutes = array();
foreach($nextweek_dates as $date){
$content .= "<td align=\\"center\\" width=\\"14%\\">\\r";
$dailyminutes = 0;
foreach($hours_array as $hour){
$times = explode("-",$hour);
$min = $times[0];
$max = $times[1];
if (array_key_exists($date,$emp_hours)){
//look for ClockIn time within min/max range
foreach($emp_hours[$date]['ClockIn'] as $timein){
if ($timein >= $min && $timein <= $max){
$in = $timein;
break;
}else{
$in = "";
}
}
//look for ClockOut time within min/max range
foreach($emp_hours[$date]['ClockOut'] as $timeout){
if ($timeout >= $min && $timeout <= $max){
$out = $timeout;
break;
}else{
$out = "";
}
}
}
$dailyminutes = $dailyminutes+($out-$in);
$display = (isset($in) && !empty($in) ? "$in - $out<br />" : '');
$content .= "<b>$hour</b><br />$display\\r";
}
$Tdailyminutes[$date] = $dailyminutes;
$content .= "</td>\\r";
}
$content .= "</tr>\\r";
//Total hours
$content .= "<tr>\\r";
foreach($nextweek_dates as $date){
$Thours = $Tdailyminutes[$date]/100;
$content .= "<td align=\\"center\\" width=\\"14%\\" class=\\"heading\\">$Thours hrs</td>\\r";
}
$content .= "</tr>\\r";
$content .= "</table>\\r";
?>
<html>
<head>
<style type="text/css">
body {
margin: 0;
padding:5px;
font-weight: normal;
font-size:13px;
font-family: Arial;
}
.table {
background-color:#EFEFEF;
font-size:1em;
color:#000000;
padding:0;
margin:0 auto 25px;
border:1px solid #DDD7D0;
-moz-border-radius: 6px 6px 6px 6px;
-webkit-border-radius: 6px 6px 6px 6px;
border-radius: 6px 6px 6px 6px;
-moz-box-shadow: 1px 1px 4px #E9E4DD;
-webkit-box-shadow: 1px 1px 4px #E9E4DD;
box-shadow: 1px 1px 4px #E9E4DD;
}
.table th {
font-size:1.2em;
font-weight:bold;
background-color:#EEF2F5; /* for non-css3 browsers */
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#EEF2F5', endColorstr='#A7AAB2'); /* for IE */
background: -webkit-gradient(linear, left top, left bottom, from(#EEF2F5), to(#A7AAB2)); /* for webkit browsers */
background: -moz-linear-gradient(top, #EEF2F5, #A7AAB2); /* for firefox 3.6+ */; color:#171717;
text-shadow: 1px 1px #E9E9E9;
-moz-border-radius: 6px 6px 0 0;
-webkit-border-radius: 6px 6px 0 0;
border-radius: 6px 6px 0 0;
padding:4px 0;
}
.table td {
background-color:#FFFFFF;
padding:1px 10px;
}
.table .heading{
font-size:1.1em;
background-color:#A7AAB2;
padding:1px 10px;
-moz-border-radius: 0 0 6px 6px;
-webkit-border-radius: 0 0 6px 6px;
border-radius: 0 0 6px 6px;
border-bottom: 1px solid #808993;
}
</style>
</head>
<body>
<?php
echo $content;
?>
</body>
</html>
I didn’t add much data to it but I looks like image below.