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

标签 php html mysql sql calendar

我正在使用 David Walsh PHP 日历,经过一些修改后它再次完美运行,但我有一个无法解决的问题,每个月 10 日之前的事件不会显示...

这是几个月前的问题,但我无法解决这个问题。这是 INT 的问题,不能是“01”或“02”,但总是“1”和“2”

您可以在 www.proxin.nl/nologin/ 处查看日历,2014年10月9日至10日有事件,代码如下,您能给我一个正确的方向吗?

谢谢, 丹尼斯

<?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));

关于PHP、MySql - 旧日历不显示每月 10 天以下的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26151796/

相关文章:

php - 如何在 "OR LIKE"条件 Laravel 中使用 "AND"

javascript - 代码镜像。 htmlmixed 模式下的 lint

javascript - 从包含中文和拉丁字符的电子邮件字段中检索原始值

html - 以 Angular 2 访问数据属性值

php - 使用 JOIN 包含 NULL 值

php - MySQL 日期格式 - 难以查询日期

mysql - 比较来自 mysql 备份的数据

phpmyadmin - 如何更新整个 MySQL 数据库的结构?

php - 在 PHP 中输​​出面包屑的最佳实践

php - 如何自动分配行的 ID 列