2014-02-21 61 views
0

即时通讯设法设置此php事件日历我在网上找到。但我只能让它显示二月份和三月的事件。没有其他来自mysql数据库的事件会显示。我相信错误是在这段代码中。我一直在搞这个2天,讨厌寻求帮助,因为我真的只是想弄明白。但任何人都可以帮忙吗?php日历没有显示比一个月更远的事件

/* get all events for the given month */ 
$events = array(); 

$month = str_pad($month,2,0 , STR_PAD_LEFT); 
$query = "SELECT title, DATE_FORMAT(event_date,'%Y-%m-%d') AS event_date FROM events WHERE event_date LIKE '$year-$month%'"; 
$result = $db_link->query($query) or die('cannot get results!'); 
while($row = $result->fetch_assoc()) { 
    $events[$row['event_date']][] = $row; 
} 

继承人如果那是不够的或任何人只是想整个事情,看看它:

<?php 
/* draws a calendar */ 
function draw_calendar($month,$year,$events = array()){ 

    /* draw table */ 
    $calendar = '<table cellpadding="0" cellspacing="0" class="calendar">'; 

    /* table headings */ 
    $headings = array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'); 
    $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; 
    $dates_array = array(); 

    /* 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++; 
    endfor; 

    /* keep going with days.... */ 
    for($list_day = 1; $list_day <= $days_in_month; $list_day++): 
     $calendar.= '<td class="calendar-day"><div style="position:relative;height:100px;">'; 
      /* 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">'.$event['title'].'</div>'; 
       } 
      } 
      else { 
       $calendar.= str_repeat('<p>&nbsp;</p>',2); 
      } 
     $calendar.= '</div></td>'; 
     if($running_day == 6): 
      $calendar.= '</tr>'; 
      if(($day_counter+1) != $days_in_month): 
       $calendar.= '<tr class="calendar-row">'; 
      endif; 
      $running_day = -1; 
      $days_in_this_week = 0; 
     endif; 
     $days_in_this_week++; $running_day++; $day_counter++; 
    endfor; 

    /* 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>'; 
     endfor; 
    endif; 

    /* final row */ 
    $calendar.= '</tr>'; 


    /* end the table */ 
    $calendar.= '</table>'; 

    /** DEBUG **/ 
    $calendar = str_replace('</td>','</td>'."\n",$calendar); 
    $calendar = str_replace('</tr>','</tr>'."\n",$calendar); 

    /* all done, return result */ 
    return $calendar; 
} 

function random_number() { 
    srand(time()); 
    return (rand() % 7); 
} 

/* date settings */ 
$month = (int) (isset($_GET['month']) ? $_GET['month'] : date('m')); 
$year = (int) (isset($_GET['year']) ? $_GET['year'] : date('Y')); 
/* 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>'; 

/* "next month" control */ 
$next_month_link = '<a href="?month='.($month != 12 ? $month + 1 : 1).'&year='.($month != 12 ? $year : $year + 1).'" class="control">Next Month &gt;&gt;</a>'; 

/* "previous month" control */ 
$previous_month_link = '<a href="?month='.($month != 1 ? $month - 1 : 12).'&year='.($month != 1 ? $year : $year - 1).'" class="control">&lt;&lt; Previous Month</a>'; 


/* bringing the controls together */ 
$controls = '<form method="get">'.$select_month_control.$select_year_control.'&nbsp;<input type="submit" name="submit" value="Go" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'.$previous_month_link.'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'.$next_month_link.' </form>'; 

/* get all events for the given month */ 
$events = array(); 
$month = str_pad($month,2,0 , STR_PAD_LEFT); 
$query = "SELECT title, DATE_FORMAT(event_date,'%Y-%m-%d') AS event_date FROM events WHERE event_date LIKE '$year-$month%'"; 
$result = mysql_query($query,$db_link) or die('cannot get results!'); 
while($row = mysql_fetch_assoc($result)) { 
    $events[$row['event_date']][] = $row; 
} 

/* get all events for the given month */ 

echo '<h2 style="float:left; background-color: #9C9; padding-right:30px;">'.date('F',mktime(0,0,0,$month,1,$year)).' '.$year.'</h2>'; 
echo '<div style="float:left;">'.$controls.'</div>'; 
echo '<div style="clear:both;"></div>'; 
echo draw_calendar($month,$year,$events); 
echo '<br /><br />'; 
?> 

回答

0

您基本的查询是:

SELECT title, DATE_FORMAT(event_date,'%Y-%m-%d') AS event_date 
FROM events 
WHERE event_date LIKE '$year-$month%'; 

不要直接上使用like日期。有一个隐式转换为字符串,它可能不是您所期望的格式。试试这个:

SELECT title, DATE_FORMAT(event_date,'%Y-%m-%d') AS event_date 
FROM events 
WHERE date_format(event_date, '%Y-%m') LIKE '$year-$month%'; 

你也可以这样做:

SELECT title, DATE_FORMAT(event_date,'%Y-%m-%d') AS event_date 
FROM events 
WHERE year(event_date) = $year and month(event_date) = $month; 
+0

嗯,这仍然只显示二月和三月事件。也在我的MySQL数据库“event_date”是日期类型,如果这在任何地方有所作为。 – Nick

+0

@尼克。 。 。你正在使用什么论点?您写入的查询返回一个月的数据。 –

+0

我的意思是当我使用下一个和上个月的按钮时,它显示除2月和3月以外的所有月份的空日历。我为2013年二月添加了一个活动,并在日历上显示。但2014年1月不会显示。也不会添加其他15个随机日期中的任何一个。在feb和march月份的数据库中的5个事件显示很好。谢谢你的帮助! – Nick

0

AHA!我想到了!我为每个月的每一天添加了一个活动,并且我意识到它并没有显示第1-9天的活动。我只需要将DATE_FORMAT(event_date,'%Y-%m-%d')更改为DATE_FORMAT(event_date,'%Y-%m-%e')