From: [EMAIL PROTECTED] Operating system: Windows 2000 Professional PHP version: 4.0.6 PHP Bug Type: Date/time related Bug description: last week in october Monday displays twice!
When iterating from a start mktime to another using the date() function the First Day of the Last Week in October messes up. The same problem appears when using Apache or IIS. Just cut and paste below to see what I mean. <?php $today = getdate(mktime (0,11,0,10,1,2001)); print "Notice Problem with October<br>".full_calendar_month ($today,$PHP_SELF, null); $today = getdate(); print "Notice No Problem<br>".full_calendar_month ($today,$PHP_SELF, null); /* DISPLAY A FULL MONTH CALENDAR */ function full_calendar_month ($today,$url, $arrevent) { GLOBAL $cbouser; $user = null; if ($cbouser) { $user = "&cbouser=$cbouser";}//display the userid if (!$today) {$today = getdate();} //NEED TO CONVERT $today to midnight! $today = getdate(mktime(0,0,0,$today["mon"],$today["mday"],$today["year"])); $mktoday = mktime (0,0,0,$today["mon"],1,$today["year"]); $mkday = 86400; //1 day in mktime 24 hr * 60 min * 60 sec. $fday = date("w",$mktoday); //first day of the month w - day of the week, numeric, i.e. "0" (Sunday) to "6" (Saturday) $mth_num = date("n",$mktoday); //the month number ie. Nov 11 $cell_bgcolor = "#C0C0C0"; /* DETERMINE THE FIRST DAY OF THE MONTH */ if ($fday == 0) { //SUNDAY NEED TO GET TO MONDAY $mkstart = $mktoday - $mkday * 6; } elseif ($fday != 1) {//need to make the last part of last week. $mkstart = $mktoday - $mkday * ($fday-1); } else { //THE MONTH STARTS WITH MONDAY $mkstart = $mktoday; } //FIND THE LAST DAY OF THE MONTH $mkend = $mktoday + $mkday * (date("t",$mktoday)-1); //t - number of days in the given month; i.e. "28" to "31" if (date("w",$mkend) != 0) {$mkend = $mkend + $mkday * (7-date("w",$mkend));} #echo date("w D M j Y ",$mkend)."<br>"; //BEGIN THE OUTPUT /* FOR DROP BOX <select size=\"1\" name=\"month_now\" size=\"1\">".month_dropbox($mth_num)."</select> <select size=\"1\" name=\"year_now\" size=\"1\">".year_dropbox(date("Y",$mktoday))." <input type=\"submit\" name=\"submit\" value=\"Go\"> */ $table = "<table border=\"1\" width=\"100%\"> <tr><th><input type=\"submit\" name=\"submit\" value=\"<<\"></th> <th colspan=\"4\" align=\"center\">".date("F Y",$mktoday)." </th><th><input type=\"submit\" name=\"submit\" value=\">>\"></th></tr> <tr><th>Monday</th><th>Tuesday</th><th>Wednesday</th><th>Thursday</th><th>Friday</th><th>Sat/Sun</th></tr>"; //SHADE THE DAYS THAT ARE NOT IN THE MONTH if ($today[0] == $mkstart) { $bgcolor = "bgcolor=\"#FFFF00\" bordercolor=\"#FF0000\""; } elseif ($mth_num != date("n",$mkstart)) { $bgcolor = "bgcolor=\"$cell_bgcolor\""; } else { $bgcolor = ""; } $event_date = "<a href=\"$url?event_date=".date("Y-m-d",$mkstart)."&rdocalendar_view=30$user\">".date("F j",$mkstart)."</a>"; //THE FIRST DAY $table .= "<tr><td align=\"right\" valign=\"top\" $bgcolor>$event_date</td>"; for ($i=$mkstart+$mkday;$i<$mkend;$i+=$mkday) { $event_date = "event_date=".date("Y-m-d",$i)."&rdocalendar_view=30$user"; //background color if ($today[0] == $i) { $bgcolor = "bgcolor=\"#FFFF00\" bordercolor=\"#FF0000\" border=1"; } elseif ($mth_num != date("n",$i)) { $bgcolor = "bgcolor=\"$cell_bgcolor\" border=0"; } else { $bgcolor = ""; } //date display if (date("j",$i) == 1) { $the_day = date("F j",$i); } else { $the_day = date("j",$i);} switch (date("w",$i)) { // day of the week, numeric, i.e. "0" (Sunday) to "6" (Saturday) case 1: #monday $table .= "<tr><td align=\"right\" valign=\"top\" $bgcolor><a href=\"$url?$event_date\">$the_day</a></td>"; break; case 6: #saturday - sunday $table .= "<td> <table width=100% $bgcolor> <tr><td align=\"right\" valign=\"top\"><a href=\"$url?$event_date\">$the_day</a></td></tr> </table>"; $i+=$mkday; //background color if ($today[0] == $i) { $bgcolor = "bgcolor=\"#FFFF00\" bordercolor=\"#FF0000\" border=1"; } elseif ($mth_num != date("n",$i)) { $bgcolor = "bgcolor=\"$cell_bgcolor\" border=0"; } else { $bgcolor = ""; } $event_date = "event_date=".date("Y-m-d",$i)."&rdocalendar_view=30$user"; //date display if (date("j",$i) == 1) { $the_day = date("F j",$i); } else { $the_day = date("j",$i);} #SUNDAY $table .= "<table width=100% $bgcolor> <tr> <td align=\"right\" valign=\"top\"> <hr><a href=\"$url?$event_date\">$the_day</a></td></tr></table></td></tr>"; break; default: #tuesday - friday $table .= "<td align=\"right\" valign=\"top\" $bgcolor><a href=\"$url?$event_date\">$the_day</a></td>"; break; } } $table .= "</table>"; return $table; } ?> -- Edit bug report at: http://bugs.php.net/?id=14635&edit=1 -- PHP Development Mailing List <http://www.php.net/> To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] To contact the list administrators, e-mail: [EMAIL PROTECTED]