cturner Posted October 25, 2006 Share Posted October 25, 2006 My calendar displays dates from the previous month on the next month. I don't want those dates in the calendar. Can someone please tell me how I can fix this problem? Thanks in advance.Here is the code that I am working with:[code]require "config.php";// Gather variables from// user input and break them// down for usage in our scriptif(!isset($_REQUEST['date'])){ $date = mktime(0,0,0,date('m'), date('d'), date('Y'));} else { $date = $_REQUEST['date'];}$day = date('d', $date);$month = date('m', $date);$year = date('Y', $date);// Get the first day of the month$month_start = mktime(0,0,0,$month, 1, $year);// Get friendly month name$month_name = date('M', $month_start);// Figure out which day of the week// the month starts on.$month_start_day = date('D', $month_start);switch($month_start_day){ case "Sun": $offset = 0; break; case "Mon": $offset = 1; break; case "Tue": $offset = 2; break; case "Wed": $offset = 3; break; case "Thu": $offset = 4; break; case "Fri": $offset = 5; break; case "Sat": $offset = 6; break;}// determine how many days are in the last month.if($month == 1){ $num_days_last = cal_days_in_month(0, 12, ($year -1));} else { $num_days_last = cal_days_in_month(0, ($month -1), $year);}// determine how many days are in the current month.$num_days_current = cal_days_in_month(0, $month, $year);// Build an array for the current days// in the monthfor($i = 1; $i <= $num_days_current; $i++){ $num_days_array[] = $i;}// Build an array for the number of days// in last monthfor($i = 1; $i <= $num_days_last; $i++){ $num_days_last_array[] = $i;}// If the $offset from the starting day of the// week happens to be Sunday, $offset would be 0,// so don't need an offset correction.if($offset > 0){ $offset_correction = array_slice($num_days_last_array, -$offset, $offset); $new_count = array_merge($offset_correction, $num_days_array); $offset_count = count($offset_correction);}// The else statement is to prevent building the $offset array.else { $offset_count = 0; $new_count = $num_days_array;}// count how many days we have with the two// previous arrays merged together$current_num = count($new_count);// Since we will have 5 HTML table rows (TR)// with 7 table data entries (TD)// we need to fill in 35 TDs// so, we will have to figure out// how many days to appened to the end// of the final array to make it 35 days.if($current_num > 35){ $num_weeks = 6; $outset = (42 - $current_num);} elseif($current_num < 35){ $num_weeks = 5; $outset = (35 - $current_num);}if($current_num == 35){ $num_weeks = 5; $outset = 0;}// Outset Correctionfor($i = 1; $i <= $outset; $i++){ $new_count[] = $i;}// Now let's "chunk" the $all_days array// into weeks. Each week has 7 days// so we will array_chunk it into 7 days.$weeks = array_chunk($new_count, 7);// Build Previous and Next Links$previous_link = "<a href=\"".$_SERVER['PHP_SELF']."?date=";if($month == 1){ $previous_link .= mktime(0,0,0,12,$day,($year -1));} else { $previous_link .= mktime(0,0,0,($month -1),$day,$year);}$previous_link .= "\"><< </a>";$next_link = "<a href=\"".$_SERVER['PHP_SELF']."?date=";if($month == 12){ $next_link .= mktime(0,0,0,1,$day,($year + 1));} else { $next_link .= mktime(0,0,0,($month +1),$day,$year);}$next_link .= "\"> >></a>";// Build the heading portion of the calendar tableecho "<table border=\"0\" cellpadding=\"1\" cellspacing=\"1\" width=\"250\" class=\"calendar\">\n". "<tr>\n". "<td colspan=\"7\">\n". "<table align=\"center\">\n". "<tr>\n". "<td colspan=\"2\" width=\"150\" align=\"left\">$previous_link</td>\n". "<td colspan=\"3\" width=\"150\" align=\"center\"><strong>$month_name $year</strong></td>\n". "<td colspan=\"2\" width=\"150\" align=\"right\">$next_link</td>\n". "</tr>\n". "</table>\n". "</td>\n". "<tr>\n". "<td><strong>S</strong></td><td><strong>M</strong></td><td><strong>T</strong></td><td><strong>W</strong></td><td><strong>T</strong></td><td><strong>F</strong></td><td><strong>S</strong></td>\n". "</tr>\n";// Now we break each key of the array// into a week and create a new table row for each// week with the days of that week in the table data$i = 0;foreach($weeks AS $week){echo "<tr>\n"; foreach($week as $d){ if($i < $offset_count){ $day_link = "<a href=diary_entry.php?entry_date=".mktime(0,0,0,$month -1,$d,$year).">$d</a><br>"; echo "<td class=\"nonmonthdays\"><sup>$day_link</sup></td>\n"; } if(($i >= $offset_count) && ($i < ($num_weeks * 7) - $outset)){ $day_link = "<a href=diary_entry.php?entry_date=".mktime(0,0,0,$month,$d,$year).">$d</a><br>"; if($date == mktime(0,0,0,$month,$d,$year)){ echo "<td class=\"today\"><sup>$d</sup></td>\n"; } else { echo "<td class=\"days\"><sup>$day_link</sup></td>\n"; } } //elseif(($outset > 0)) { //if(($i >= ($num_weeks * 7) - $outset)){ // $day_link = "<a href=diary_entry.php?entry_date=".mktime(0,0,0,$month +1,$d,$year).">$d</a><br>"; //echo "<td class=\"nonmonthdays\"><sup>$day_link</sup></td>\n"; // } //} $i++; } echo "</tr>\n"; }// Close out your table and that's it!echo '<tr><td colspan="7" class="days"></td></tr>';echo '</table>';[/code] Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.