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] Link to comment https://forums.phpfreaks.com/topic/25111-calendar-is-displaying-dates-from-the-previous-month/ Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.