如何使用MySQL,PHP等创建动态日历

时间:2010-08-31 21:22:32

标签: php mysql events calendar

我希望根据一些预先存在的事件条目创建日历。我目前有一个使用MySQL和PHP的事件创建系统。但是,我只能以议程格式列出这些,按最快的事件排序。

是否存在基于数据库中的事件创建月历的现有方法?我的编码经验很少,所以我认为我不能创建自己的日历系统,但是通过一些编码帮助,我可以将一些东西拼凑在一起。

我首选的最终结果是在正确的日期制作一个日历,其中包含事件标题的日历(可能缩小到适合),指向事件页面的链接,以及悬停,类似工具提示的弹出窗口(我有一些东西)已经在议程中实现了。)另外,我愿意使用PHP,MySQL,Javascript或Jquery技术,因为我已经在我的服务器上使用了这些技术。

由于

2 个答案:

答案 0 :(得分:2)

这是在没有任何jquery的情况下在PHP中生成动态日历的最小,最简单和最简单的编码方式。只需复制下面的PHP代码并保存为“index.php”文件即可。然后运行此文件。将生成具有选择年,月和之前&的功能的动态日历。下个月。您可以设置事件标题或链接显示日期的位置。我希望这会有所帮助。

<?php 
    $y = $_GET['y'] ?  $_GET['y'] : date('Y');
    $m = $_GET['m'] ?  $_GET['m'] : date('m');
    //display 5 next and 5 previous years of selected year
    for ($i=$y-5; $i<=$y+5; $i++){
        echo '<a href="index.php?y='.$i.'&m='.$m.'">'.$i.'</a>&nbsp&nbsp;';  
    }
    echo "<br><br>";

    //months array just like Jan,Feb,Mar,Apr in short format
    $m_array = array('1'=>'Jan', '2'=>'Feb', '3'=>'Mar', '4'=>'Apr', '5'=>'May', '6'=>'Jun', '7'=>'Jul', '8'=>'Aug', '9'=>'Sep', '10'=>'Oct', '11'=>'Nov', '12'=>'Dec');
    //display months
    foreach ($m_array as $key=>$val){
        echo '<a href="index.php?y='.$y.'&m='.$key.'">'.$val.'</a>&nbsp&nbsp;';      
    }
    echo "<br><br>";

    $d_array = array('1'=>31, '2'=>28, '3'=>31, '4'=>30, '5'=>31, '6'=>30, '7'=>31, '8'=>31, '9'=>30, '10'=>31, '11'=>30, '12'=>31);
    $d_m = ($m==2 && $y%4==0)?29:$d_array[$m];
    echo '<table><tr><th colspan="7">'.$m_array[$m].'&nbsp'.$y.'</th></tr><tr>';
    //days array
    $days_array = array('1'=>'Mon', '2'=>'Tue', '3'=>'Wed', '4'=>'Thu', '5'=>'Fri', '6'=>'Sat', '7'=>'Sun');
    //display days
    foreach ($days_array as $key=>$val){
        echo '<th>'.$val.'</th>';      
    }
    echo "</tr></tr>";
    $date = $y.'-'.$m.'-01';
    //find start day of the month
    $startday = array_search(date('D',strtotime($date)), $days_array);
    //daisplay month dates
    for($i=0; $i<($d_m+$startday); $i++){
        $day = ($i-$startday+1<=9)?'0'.($i-$startday+1):$i-$startday+1;
        echo ($i<$startday)?'<td></td>':'<td>'.$day.'</td>';
        echo ($i%7==0)?'</tr><tr>':''; 
    }
    //calculate next & prev month
    $next_y=(($m+1)>12)?($y+1):$y;
    $next_m=(($m+1)>12)?1:($m+1);
    $prev_y=(($m-1)<=0)?($y-1):$y;
    $prev_m=(($m-1)<=0)?12:($m-1);
    //daisplay next prev
    echo '<tr><td><a href="index.php?y='.$prev_y.'&m='.$prev_m.'">Prev</a></td><td></td><td></td><td></td><td></td><td></td><td><a href="index.php?y='.$next_y.'&m='.$next_m.'">Next</a></td></tr>';
?>

答案 1 :(得分:0)

你需要打破这个项目。首先,确定您的需求并设计一个数据库来满足它们。对于日历,我更喜欢有一个事件表,然后是一个存储这些事件发生的单独表。这允许重复的事件。例如,如果我在接下来的10天内每个星期一都有一个事件,那么我将在事件表中出现10次事件,在事件表中出现一个事件。现在,问题在于无法表示无限重复的事件。根据我的经验,用户实际选择结束日期会更好,但根据您的应用程序,您的用户可能不喜欢这样。

设置好数据库后,就可以使用界面了。