如何根据数据库条目更改日历单元格颜色?

时间:2016-06-09 05:50:20

标签: php mysql css calendar

使用考勤模块我希望页面更多UI。

所以,我有一个日历,我希望有细胞颜色 GREEN如果员工在该特定日期"PRESENT"RED如果员工在该特定日期"ABSENT"YELLOW如果员工在特定日期"LEAVE"

以下是我的Calendar Class

class Calendar {


/**
 * Constructor
 */
public function __construct(){
    $this->naviHref = htmlentities($_SERVER['PHP_SELF']);
}

/********************* PROPERTY ********************/
private $dayLabels = array("Mon","Tue","Wed","Thu","Fri","Sat","Sun");

private $currentYear=0;

private $currentMonth=0;

private $currentDay=0;

private $currentDate=null;

private $daysInMonth=0;

private $naviHref= null;

/********************* PUBLIC **********************/


/**
 * print out the calendar
 */
public function show() {
     $year == null;

     $month == null;

    if(null==$year&&isset($_GET['year'])){

        $year = $_GET['year'];

    }else if(null==$year){

        $year = date("Y",time());

    }

    if(null==$month&&isset($_GET['month'])){

        $month = $_GET['month'];

    }else if(null==$month){

        $month = date("m",time());

    }


    $this->currentYear=$year;

    $this->currentMonth=$month;

    $this->daysInMonth=$this->_daysInMonth($month,$year);

    $content='<div id="calendar">'.
        '<div class="box">'.
        $this->_createNavi().
        '</div>'.
        '<div class="box-content">'.
        '<ul class="label">'.$this->_createLabels().'</ul>';
    $content.='<div class="clear"></div>';
    $content.='<ul class="dates">';

    $weeksInMonth = $this->_weeksInMonth($month,$year);
    // Create weeks in a month
    for( $i=0; $i<$weeksInMonth; $i++ ){

        //Create days in a week
        for($j=1;$j<=7;$j++){
            $content.=$this->_showDay($i*7+$j);
        }
    }

    $content.='</ul>';

    $content.='<div class="clear"></div>';

    $content.='</div>';

    $content.='</div>';
    return $content;
}

/********************* PRIVATE **********************/
/**
 * create the li element for ul
 */
private function _showDay($cellNumber){

    if($this->currentDay==0){

        $firstDayOfTheWeek = date('N',strtotime($this->currentYear.'-'.$this->currentMonth.'-01'));

        if(intval($cellNumber) == intval($firstDayOfTheWeek)){

            $this->currentDay=1;

        }
    }

    if( ($this->currentDay!=0)&&($this->currentDay<=$this->daysInMonth) ){

        $this->currentDate = date('Y-m-d',strtotime($this->currentYear.'-'.$this->currentMonth.'-'.($this->currentDay)));

        $cellContent = $this->currentDay;

        $this->currentDay++;

    }else{

        $this->currentDate =null;

        $cellContent=null;
    }


    return '<li id="li-'.$this->currentDate.'" class="'.($cellNumber%7==1?' start ':($cellNumber%7==0?' end ':' ')).
    ($cellContent==null?'mask':'').'">'.$cellContent.'</li>';


}

/**
 * create navigation
 */
private function _createNavi(){

    $nextMonth = $this->currentMonth==12?1:intval($this->currentMonth)+1;

    $nextYear = $this->currentMonth==12?intval($this->currentYear)+1:$this->currentYear;

    $preMonth = $this->currentMonth==1?12:intval($this->currentMonth)-1;

    $preYear = $this->currentMonth==1?intval($this->currentYear)-1:$this->currentYear;

    return
        '<div class="header">'.
        '<a class="prev" href="'.$this->naviHref.'?month='.sprintf('%02d',$preMonth).'&year='.$preYear.'">Prev</a>'.
        '<span class="title">'.date('Y M',strtotime($this->currentYear.'-'.$this->currentMonth.'-1')).'</span>'.
        '<a class="next" href="'.$this->naviHref.'?month='.sprintf("%02d", $nextMonth).'&year='.$nextYear.'">Next</a>'.
        '</div>';
}

/**
 * create calendar week labels
 */
private function _createLabels(){

    $content='';

    foreach($this->dayLabels as $index=>$label){

        $content.='<li class="'.($label==6?'end title':'start title').' title">'.$label.'</li>';

    }

    return $content;
}



/**
 * calculate number of weeks in a particular month
 */
private function _weeksInMonth($month=null,$year=null){

    if( null==($year) ) {
        $year =  date("Y",time());
    }

    if(null==($month)) {
        $month = date("m",time());
    }

    // find number of days in this month
    $daysInMonths = $this->_daysInMonth($month,$year);

    $numOfweeks = ($daysInMonths%7==0?0:1) + intval($daysInMonths/7);

    $monthEndingDay= date('N',strtotime($year.'-'.$month.'-'.$daysInMonths));

    $monthStartDay = date('N',strtotime($year.'-'.$month.'-01'));

    if($monthEndingDay<$monthStartDay){

        $numOfweeks++;

    }

    return $numOfweeks;
}

/**
 * calculate number of days in a particular month
 */
private function _daysInMonth($month=null,$year=null){

    if(null==($year))
        $year =  date("Y",time());

    if(null==($month))
        $month = date("m",time());

    return date('t',strtotime($year.'-'.$month.'-01'));
}

}

0 个答案:

没有答案