PHP,MySql-旧日历不显示每月第10天以下的事件


PHP, MySql - Old Calendar not showing events below day 10 of each month

我使用的是David Walsh PHP日历,经过一些修改后,它再次完美工作,但我有一个问题无法自行解决,每个月第10天之前几天的事件没有显示。。。

这是几个月前的一个问题,但我无法解决。。这是INT的问题,不能是"01"或"02",但始终是"1"answers"2"

你可以在www.proxy.nl/nologin/上看到日历,2014年10月9日和10日有活动,代码如下,你能给我一个正确的方向吗?

谢谢,Dennis

<?php
include 'config.php';
function draw_calendar($month,$year,$events = array()){
    /* draw table */
    $calendar = '<table cellpadding="0" cellspacing="0" class="calendar">';
    /* table headings */
    $headings = array('Zondag','Maandag','Dinsdag','Woensdag','Donderdag','Vrijdag','Zaterdag');
    $calendar.= '<tr class="calendar-row"><td class="calendar-day-head">'.implode('</td><td class="calendar-day-head">',$headings).'</td></tr>';
    /* days and weeks vars now ... */
    $running_day = date('w',mktime(0,0,0,$month,1,$year));
    $days_in_month = date('t',mktime(0,0,0,$month,1,$year));
    $days_in_this_week = 1;
    $day_counter = 0;
    /* row for week one */
    $calendar.= '<tr class="calendar-row">';
    /* print "blank" days until the first of the current week */
    for($x = 0; $x < $running_day; $x++){
        $calendar.= '<td class="calendar-day-np">&nbsp;</td>';
        $days_in_this_week++;
    }
    /* keep going with days.... */
    for($list_day = 1; $list_day <= $days_in_month; $list_day++){
        $calendar.= '<td class="calendar-day">';
        /* add in the day number */
        $calendar.= '<div class="day-number">'.$list_day.'</div>';
        $event_day = $year.'-'.$month.'-'.$list_day;
        if(isset($events[$event_day])) {
            foreach($events[$event_day] as $event) {
                $calendar.= '<div class="event"><a href="?event='.$event['id'].'">'.$event['bedrijfsnaam'].'<span>'.$event['tijdvan'].' - '.$event['tijdtot'].'</span></a></div>';
            }
        } else {
            $calendar.= str_repeat('',2);
        }
        $calendar.= '</td>';
        if($running_day == 6){
            $calendar.= '</tr>';
            if(($day_counter+1) != $days_in_month){
                $calendar.= '<tr class="calendar-row">';
            }
            $running_day = -1;
            $days_in_this_week = 0;
        }
        $days_in_this_week++;
        $running_day++;
        $day_counter++;
    }
    /* finish the rest of the days in the week */
    if($days_in_this_week < 8){
        for($x = 1; $x <= (8 - $days_in_this_week); $x++){
            $calendar.= '<td class="calendar-day-np">&nbsp;</td>';
        }
    }
    /* final row */
    $calendar.= '</tr>';
    $calendar.= '</table>';
    return $calendar;
}
?>
<link rel="stylesheet" href="css/foundation.css" />
<link rel="stylesheet" href="css/style.css" />
<script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
<script src="js/bPopup.js"></script>
<script type="text/javascript" src="js/hamburger.js"></script>
<div class="row">
<div class="large-12 medium-12 panel columns">
    <?php
// date settings
    $month = (int) (isset($_GET['month']) ? $_GET['month'] : date('m'));
    $year = (int) (isset($_GET['year']) ? $_GET['year'] : date('Y'));
    if($month < 10){
        $month = '0'.$month;
    }
    // select month control
    $select_month_control = '<select name="month" id="month">';
    for($x = 1; $x <= 12; $x++){
        $select_month_control.= '<option value="'.$x.'"'.($x != $month ? '' : '     selected="selected"').'>'.date('F',mktime(0,0,0,$x,1,$year)).'</option>';
}
$select_month_control.= '</select>';
// select year control
$year_range = 7;
$select_year_control = '<select name="year" id="year">';
for($x = ($year-floor($year_range/2)); $x <= ($year+floor($year_range/2)); $x++) {
    $select_year_control.= '<option value="'.$x.'"'.($x != $year ? '' : 'selected="selected"').'>'.$x.'</option>';
}
$select_year_control.= '</select>';
// bringing the controls together
$controls = '<form method="get">'.$select_month_control.$select_year_control.'<input type="submit" name="submit" class="button" value="Gaan!"></form>';
// get all events for the given month   
$result = mysqli_query($con, "SELECT bedrijfsnaam, TIME_FORMAT(tijdvan, '%H:%i') as tijdvan, TIME_FORMAT(tijdtot, '%H:%i') as tijdtot, id, DATE_FORMAT(datum,'%Y-%m-%d') AS datum FROM reserveringen WHERE datum LIKE '$year-$month%' ORDER BY tijdvan") or die('cannot get results!');
while($row = mysqli_fetch_assoc($result)){
    $events[$row['datum']][] = $row;
}
echo '<div class="center"><a class="databefore" href="?month='.($month != 1 ? $month - 1 : 12).'&year='.($month != 1 ? $year : $year - 1).'" class="control">&lt;</a>';
echo '<caption>'.date('F',mktime(0,0,0,$month,1,$year)).' '.$year.'</caption>';
echo '<a class="dataafter" href="?month='.($month != 12 ? $month + 1 : 1).'&year='.($month != 12 ? $year : $year + 1).'" class="control">&gt;</a></div>';
echo '<div class="controls">'.$controls.'</div>';
echo draw_calendar($month,$year,$events);
?>

和config.php:

<?php 
$host="localhost";
$username="agenda2";
$password="agenda2";
$db_name="agenda2";
$con=mysqli_connect("$host", "$username", "$password", "$db_name")or die("cannot connect");

就像你说的,你需要一个月和日的前导零。对我来说,它看起来像

$event_day = $year.'-'.$month.'-'.$list_day;

是导致错误的原因。2014年10月9日将使$event_day为2014-10-9,而不是2014-10-09。你可以试着做

$event_day = sprintf('%d-%02d-%02d', $year, $month, $list_day);

$event_day = date('Y-m-d', mktime(0,0,0,$month,$list_day,$year));