制作一个日历程序

Posted on 2016-05-03 23:27  Y-HKL  阅读(364)  评论(0编辑  收藏  举报

calendar.class.php

<?php
date_default_timezone_set('PRC');


class Calendar{
    private $year;   //当前的年
    private $month;  //当前的月
    private $day;    //当前的天
    private $start_weekday;   //当月开始的第一天是周几
    private $days;  //当前月一共多少天

    function __construct(){
        //获得当前的年
        $this->year=isset($_GET['year'])?$_GET['year']:date("Y");
        //获得当前的月
        $this->month=isset($_GET['month'])?$_GET['month']:date("m");
        //获得当前的日
        $this->day=date("d");
        //获得这个月的天数
        $this->start_weekday=date("w",mktime(0,0,0,$this->month,1,$this->year));
        //获得这个月开始的第一天是星期几
        $this->days=date("t",mktime(0,0,0,$this->month,1,$this->year));
    }

    function out(){
        echo '<table align="center">';
        //调用改变年和月的函数
        $this->changeDate("test.php");
        //调用星期列表
        $this->weeksList();
        //调用日期列表
        $this->daysList();
        echo '</table>';
    }

    private function weeksList(){
        //创建星期数组
        $week=array('日','一','二','三','四','五','六');

        echo '<tr>';
        //输出星期数组
        for($i=0;$i<count($week);$i++){
            echo '<th class="fontb">'.$week[$i].'</th>';
        }
        echo '</tr>';
    }

    private function daysList(){
        echo '<tr>';
        //输出空格(当前一个月前面空出来的)
        for($j=0;$j<$this->start_weekday;$j++){
            echo '<td>&nbsp;</td>';
        }

        //输出这个月的日期
        for($k=1;$k<$this->days;$k++){
            $j++;
            if($k==$this->day)
                echo '<td class="fontb">'.$k.'</td>';
            else
                echo '<td>'.$k.'</td>';
            if($j%7==0)
                echo '</tr><tr>';
        }

        //后面的空格
        while($j%7!=0){
            echo '<td>&nbsp;</td>';
            $j++;
        }
        echo '</tr>';
    }

    private function prevYear($year,$month){
        $year=$year-1;
        if($year < 1970)
            $year=1970;
        return "year={$year}&month={$month}";
    }

    private function prevMonth($year,$month){
        if($month==1){
            $year=$year-1;

            if($year < 1970)
                $year=1970;
            $month=1;
        }else{
            $month--;
        }
        return "year={$year}&month={$month}";
    }

    private function nextYear($year,$month){
        $year=$year+1;
        if($year > 2038)
            $year=2038;
        return "year={$year}&month={$month}";
    }

    private function nextMonth($year,$month){
        if($month==12){
            $year=$year+1;

            if($year > 2038)
                $year=2038;
            $month=12;
        }else{
            $month++;
        }
        return "year={$year}&month={$month}";
    }

    private function changeDate($url=""){
        echo '<tr>';
        echo '<td colspan="7">';
        echo '<form>';
        echo '<select name="year" onchange="window.location=\''.$url.'?year=\'+this.options[selectedIndex].value+\'&month='.$this->month.'\'">';
        for($sy=1970; $sy <= 2038; $sy++){
            $selected = ($sy==$this->year) ? "selected" : "";
            echo '<option '.$selected.' value="'.$sy.'">'.$sy.'</option>';
        }
        echo '</select>';
        echo '<select name="month"  onchange="window.location=\''.$url.'?year='.$this->year.'&month=\'+this.options[selectedIndex].value">';
        for($sm=1; $sm<=12; $sm++){
            $selected1 = ($sm==$this->month) ? "selected" : "";
            echo '<option '.$selected1.' value="'.$sm.'">'.$sm.'</option>';
        }
        echo '</select>';
        echo '</form>';    
        echo '</td>';
        echo '</tr>';
    }
}
?>

 

calendar.php

<style>
    table{
        border:1px solid #050;
    }

    .fontb{
        color:white;
        background: blue;
    }

    th,td{
        text-align: center;
        width:30px;
        height: 30px;
    }

    form{
        margin: 0px;
        padding: 0px;
    }
    select{
        text-align: center;
    }
</style>
<?php
//包含类文件
include "./calendar.class.php";

//创建类对象
$calendar=new Calendar;

$calendar->out();
?>