datafan Posted December 17, 2007 Share Posted December 17, 2007 This is a head scratcher for me. All the months in the calendar work fine but "June", which is the only month that starts on a Sunday, isn't formatting correctly. I have played with a if ($ChosenMonth == '6') { do this}; and also tried to change $actday and $firstDay in evey way I can think of, but nothing I can think of fixes the formatting of that first row. Please take a peek here live, pick June and you will see exactly what I mean http://www.tamstouch.com/calcreate.php Thanks for any help. I almost got this thing done! The code in the Calendar Function that builds the first lines of the calendar: <?php // Get key day informations. // We need the first and last day of the month and the actual day $today = getdate(); $pickmonth = getdate(mktime(0,0,0,$ChosenMonth,1,2008)); $firstDay = getdate(mktime(0,0,0,$pickmonth['mon'],1,$pickmonth['year'])); $lastDay = getdate(mktime(0,0,0,$pickmonth['mon']+1,0,$pickmonth['year'])); // Create a table with the necessary header informations echo '<table align="center">'; if ($ChosenMonth == '1'){ ?> <tr><th colspan="4"><a href="calcreate.php">HOME</a></th><th colspan="3"><a href="calcreate.php?c=<?php echo $ChosenMonth +1;?>">Next Month</a></th></tr> <?php }elseif($ChosenMonth == '12'){ ?> <tr><th colspan="3"><a href="calcreate.php?c=<?php echo $ChosenMonth -1;?>">Prev Month</a></th><th colspan="4"><a href="calcreate.php">HOME</a></th></tr> <?php }else{ ?> <tr><th colspan="2"><a href="calcreate.php?c=<?php echo $ChosenMonth -1;?>">Prev Month</a></th><th colspan="3"><a href="calcreate.php">HOME</a></th><th colspan="2"><a href="calcreate.php?c=<?php echo $ChosenMonth +1;?>">Next Month</a></th></tr> <?php } echo '</table>'; echo '<table align="center">'; echo ' <tr><th colspan="7">'.$pickmonth['month']." - ".$pickmonth['year']."</th></tr>"; echo '<tr class="days">'; echo ' <td>Mo</td><td>Tu</td><td>We</td><td>Th</td>'; echo ' <td>Fr</td><td>Sa</td><td>Su</td></tr>'; // Display the first calendar row with correct positioning echo '<tr>'; for($i=1;$i<$firstDay['wday'];$i++){ echo '<td> </td>'; } $actday = 0; for($i=$firstDay['wday'];$i<=7;$i++){ $actday++; Complete Calendar Function : <?php //function to read flat file and build an array of the entries for the chosen month so we can use it throughout the script $flatname = "masterflat.txt"; function readflat($flatname, $ChosenMonth){ global $lines; $flatlist = file($flatname); foreach ($flatlist as $row) { for($i=count($row) -1; $i >= 0; $i--){ $result = explode("|", $row); $month = date ("n", $result[0]); if ($month == $ChosenMonth) { $lines[] = array($result[0], $result[1], $result[2], $result[3], $result[4]); } } } return $lines; } //function to sort the flat file array according to classroom and then time function mysort($a, $b) { $sc = strcmp($a[1], $b[1]); // compare classrooms if ($sc==0) // if they're equal, compare epoch { return $a[2] - $b[2]; // if a should sort above b, return -ve number } else return $sc; } // usort ($line, 'mysort'); // sort using custom function function showCalendar($ChosenMonth, $lines){ // Get key day informations. // We need the first and last day of the month and the actual day $today = getdate(); $pickmonth = getdate(mktime(0,0,0,$ChosenMonth,1,2008)); $firstDay = getdate(mktime(0,0,0,$pickmonth['mon'],1,$pickmonth['year'])); $lastDay = getdate(mktime(0,0,0,$pickmonth['mon']+1,0,$pickmonth['year'])); // Create a table with the necessary header informations echo '<table align="center">'; if ($ChosenMonth == '1'){ ?> <tr><th colspan="4"><a href="calcreate.php">HOME</a></th><th colspan="3"><a href="calcreate.php?c=<?php echo $ChosenMonth +1;?>">Next Month</a></th></tr> <?php }elseif($ChosenMonth == '12'){ ?> <tr><th colspan="3"><a href="calcreate.php?c=<?php echo $ChosenMonth -1;?>">Prev Month</a></th><th colspan="4"><a href="calcreate.php">HOME</a></th></tr> <?php }else{ ?> <tr><th colspan="2"><a href="calcreate.php?c=<?php echo $ChosenMonth -1;?>">Prev Month</a></th><th colspan="3"><a href="calcreate.php">HOME</a></th><th colspan="2"><a href="calcreate.php?c=<?php echo $ChosenMonth +1;?>">Next Month</a></th></tr> <?php } echo '</table>'; echo '<table align="center">'; echo ' <tr><th colspan="7">'.$pickmonth['month']." - ".$pickmonth['year']."</th></tr>"; echo '<tr class="days">'; echo ' <td>Mo</td><td>Tu</td><td>We</td><td>Th</td>'; echo ' <td>Fr</td><td>Sa</td><td>Su</td></tr>'; // Display the first calendar row with correct positioning echo '<tr>'; for($i=1;$i<$firstDay['wday'];$i++){ echo '<td> </td>'; } $actday = 0; for($i=$firstDay['wday'];$i<=7;$i++){ $actday++; $pickday = getdate(mktime(0,0,0,$ChosenMonth,$actday,2008)); $pickdayep = date("U", mktime(0, 0, 0,$pickday['mon'],$pickday['mday'],$pickday['year'])); $pickdayepend= $pickdayep + 86400; if ($actday == $today['mday'] && $pickmonth['mon'] == $today['mon'] && $pickmonth['year'] == $today['year']) { $class = ' class="actday"'; }else{ $class = ''; } echo "<td$class>$actday"; if ($lines) { foreach ( $lines as $key => $line ) { $line[2] = date("g:i a", strtotime("$line[2]")); $line[3] = date("g:i a", strtotime("$line[3]")); if ($line[1] == "c1") { $cellcolor = "ffff00"; }elseif ($line[1] == "c2") { $cellcolor = "ffcc00"; }elseif ($line[1] == "c3") { $cellcolor = "ff9900"; }elseif ($line[1] == "c4") { $cellcolor = "00ff00"; }elseif ($line[1] == "c5") { $cellcolor = "ffcccc"; }elseif ($line[1] == "c6") { $cellcolor = "99ccff"; }elseif ($line[1] == "MN") { $cellcolor = "00ffff"; } $day = date("j", $line[0]); if($day == $actday) { echo "<font style='font-size:8pt;'><TABLE align='center' style='background-color:#$cellcolor; width:126px;'><tr><td style='width:126px; height:5px;'>"; echo "<a href=reservations/".$line[4].">".$line[1]." ".$line[2]." - ".$line[3]."</a><br>"; echo "</td></tr></table></font>"; } } } echo "</td>"; } echo '</tr>'; //Get how many complete weeks are in the actual month $fullWeeks = floor(($lastDay['mday']-$actday)/7); for ($i=0;$i<$fullWeeks;$i++){ echo '<tr>'; for ($j=0;$j<7;$j++){ $actday++; if ($actday == $today['mday'] && $pickmonth['mon'] == $today['mon'] && $pickmonth['year'] == $today['year']) { $class = ' class="actday"'; }else{ $class = ''; } echo "<td$class>$actday"; if ($lines) { foreach ( $lines as $key => $line ) { $line[2] = date("g:i a", strtotime("$line[2]")); $line[3] = date("g:i a", strtotime("$line[3]")); if ($line[1] == "c1") { $cellcolor = "ffff00"; }elseif ($line[1] == "c2") { $cellcolor = "ffcc00"; }elseif ($line[1] == "c3") { $cellcolor = "ff9900"; }elseif ($line[1] == "c4") { $cellcolor = "00ff00"; }elseif ($line[1] == "c5") { $cellcolor = "ffcccc"; }elseif ($line[1] == "c6") { $cellcolor = "99ccff"; }elseif ($line[1] == "MN") { $cellcolor = "00ffff"; } $day = date("j", $line[0]); if($day == $actday) { echo "<font style='font-size:8pt;'><TABLE align='center' style='background-color:#$cellcolor; width:126px;'><tr><td style='width:126px; height:5px;'>"; echo "<a href=reservations/".$line[4].">".$line[1]." ".$line[2]." - ".$line[3]."</a><br>"; echo "</td></tr></table></font>"; } } } echo "</td>"; } echo '</tr>'; } //Now display the rest of the month if ($actday < $lastDay['mday']){ echo '<tr>'; for ($i=0; $i<7;$i++){ $actday++; if ($actday == $today['mday'] && $pickmonth['mon'] == $today['mon'] && $pickmonth['year'] == $today['year']) { $class = ' class="actday"'; }else{ $class = ''; } if ($actday <= $lastDay['mday']){ echo "<td$class>$actday"; if ($lines) { foreach ( $lines as $key => $line ) { $line[2] = date("g:i a", strtotime("$line[2]")); $line[3] = date("g:i a", strtotime("$line[3]")); if ($line[1] == "c1") { $cellcolor = "ffff00"; }elseif ($line[1] == "c2") { $cellcolor = "ffcc00"; }elseif ($line[1] == "c3") { $cellcolor = "ff9900"; }elseif ($line[1] == "c4") { $cellcolor = "00ff00"; }elseif ($line[1] == "c5") { $cellcolor = "ffcccc"; }elseif ($line[1] == "c6") { $cellcolor = "99ccff"; }elseif ($line[1] == "MN") { $cellcolor = "00ffff"; } $day = date("j", $line[0]); if($day == $actday) { echo "<font style='font-size:8pt;'><TABLE align='center' style='background-color:#$cellcolor; width:126px;'><tr><td style='width:126px; height:5px;'>"; echo "<a href=reservations/".$line[4].">".$line[1]." ".$line[2]." - ".$line[3]."</a><br>"; echo "</td></tr></table></font>"; } } } echo "</td>"; }else{ echo '<td> </td>'; } } echo '</tr>'; } } //end of calendar function ?> Link to comment https://forums.phpfreaks.com/topic/82052-why-is-june-the-only-month-that-isnt-showing-up-right/ Share on other sites More sharing options...
datafan Posted December 17, 2007 Author Share Posted December 17, 2007 ooops, Please move to PHP help forum. Sorry Link to comment https://forums.phpfreaks.com/topic/82052-why-is-june-the-only-month-that-isnt-showing-up-right/#findComment-417007 Share on other sites More sharing options...
btherl Posted December 18, 2007 Share Posted December 18, 2007 I think your code assumes that the wday of Sunday will be 7 .. it is actually 0. Given the format of your calendar, I would manually change any wday of 0 to 7 after getdate(), as that will make things much easier. Link to comment https://forums.phpfreaks.com/topic/82052-why-is-june-the-only-month-that-isnt-showing-up-right/#findComment-417446 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.