php 日曆源碼

來源:互聯網
上載者:User
<?php
date_default_timezone_set("Asia/shanghai");
class CalendarForm {
 
        private $year;
        
        private $month;

        private $day;
       
        private $weekend;

        private $currentdate;
      
        private $dayofmonth;
       
        private $day_count;

        private $num;

        private $week = array();

        private $retunrhtml="";

        function __construct($year, $month) {
                $this->makeWeeks($year, $month);
        }

        public function setYearMonth($year, $month) {
                $this->year = $year;
                $this->month = $month;
        }

        private function resetDayCount() {
                $this->day_count = 1;
        }

        private function setFirstWeek() {
                $this->num = 0;
        }

        public function getDayOfMonth($year, $month) {
                $this->resetDayCount();
                return date('t', mktime(0, 0, 0, $month, $this->day_count, $year ));
        }

        private function setDayOfMonth($year, $month) {
                $this->dayofmonth = $this->getDayOfMonth($year, $month);
        }

       
        private function getDayOfWeek() {
                return date('w', mktime(0, 0, 0, $this->month, $this->day_count, $this->year ));
        }

       public function getNextMonth() {
                return date('m', mktime(0, 0, 0, $this->month, 28, $this->year )+432000);
        }

        public function getNextYear() {
                return date('Y', mktime(0, 0, 0, $this->month, 28, $this->year )+432000);
        }

        public function getPrevMonth() {
                return date('m', mktime(0, 0, 0, $this->month, 1, $this->year )-432000);
        }

        public function getPrevYear() {
                return date('Y', mktime(0, 0, 0, $this->month, 1, $this->year )-432000);
        }

        private function makeWeeks($year, $month) {

                $this->setYearMonth($year, $month);
                $this->setDayOfMonth($this->year, $this->month);
                $this->setFirstWeek();

                $this->num = 0;
                for($i = 0; $i < 7; $i++) {
                      
                        $dayofweek = $this->getDayOfWeek();
                        $dayofweek = $dayofweek - 1;
                        if($dayofweek == -1) $dayofweek = 6;
                        if($dayofweek == $i) {
                                $this->week[$this->num][$i] = $this->day_count;
                                $this->day_count++;
                        } else {
                                $this->week[$this->num][$i] = "";
                        }
                }
               while(true) {
                        $this->num++;
                        for($i = 0; $i < 7; $i++) {
                                $this->week[$this->num][$i] = $this->day_count;
                                $this->day_count++;
                                if($this->day_count > $this->dayofmonth) break;
                        }
                        if($this->day_count > $this->dayofmonth) break;
                }

        }

        public function getCalendarHeader() {
                $this->retunrhtml =
                                                "<table cellpadding=2 cellspacing=0 border=1 style=\"margin-left: auto; margin-right: 0px;\">".
                                                "<tbody>".
                                                "<tr><th colspan=\"7\">".$this->month."/".$this->year."</th></tr>".
                                                "<tr>".
                                                "<th style=\"text-align: center;\">周一</th>".
                                                "<th style=\"text-align: center;\">周二</th>".
                                                "<th style=\"text-align: center;\">周三</th>".
                                                "<th style=\"text-align: center;\">周四</th>".
                                                "<th style=\"text-align: center;\">周五</th>".
                                                "<th style=\"text-align: center;\"><span style=\"color: #ff0000;\">周六</span></th>".
                                                "<th style=\"text-align: center;\"><span style=\"color: #ff0000;\">周日</span></th>".
                                                "</tr>";
        }

        public function getCalendarFooter() {
                $this->retunrhtml.="</tbody></table>";
        }

        public function getBeginTR() {
                $this->retunrhtml.="<tr>";
        }

        public function getEndTR() {
                $this->retunrhtml.="</tr>";
        }

        protected function getDay() {
                return $this->day;
        }

        protected function getMonth() {
                return $this->month;
        }

        protected function getYear() {
                return $this->year;
        }

        protected function isWeekend() {
                return $this->weekend;
        }

        protected function isCurrent() {
                return $this->currentdate;
        }
        
        public function getTDHref() {
                return $this->getDay();
        }

        public function getTD() {
                $td="td"; if ($this->isCurrent()) $td="th";
                $this->retunrhtml.="<$td style=\"text-align: right;\">".$this->getTDHref()."</$td>";
        }
        
        public function getTDWeekend() {
                $td="td"; if ($this->isCurrent()) $td="th";
                $this->retunrhtml.="<$td style=\"text-align: right;\"><font color=red>".$this->getTDHref()."</font></$td>";
        }

        protected function makeCodeMonth($year, $month) {
                $this->makeWeeks($year, $month);
                $this->getCalendarHeader();
                for($i = 0; $i < count($this->week); $i++) {
                        $this->getBeginTR();
                        for($j = 0; $j < 7; $j++) {

                                if(!empty($this->week[$i][$j])) {
                                        $this->day = $this->week[$i][$j];
                                        $this->currentdate = 0;
                                        if ( $this->year==date('Y') && $this->month==date('m') && $this->day==date('j')) $this->currentdate = 1;
                                        if($j == 5 || $j == 6) {
                                                $this->weekend = 1;
                                                $this->getTDWeekend();
                                        } else {
                                                $this->weekend = 0;
                                                $this->getTD();
                                        }

                                } else $this->retunrhtml.="<td>&nbsp;</td>";

                        }
                        $this->getEndTR();
                }
                $this->getCalendarFooter();
        }

        public function getCodeMonth() {
                $this->makeCodeMonth($this->year, $this->month);
                return $this->retunrhtml;
        }

        public function showCodeMonth() {
                echo $this->getCodeMonth();
        }

}

class TechCalendarForm extends CalendarForm {
        public function getTDHref() {
                if ($this->isWeekend()) $font = "<font color=\"#FF3F4F\">"; else $font = "<font color=\"#4A5B6C\">";
                return "<a href=\"".$_SERVER["PHP_SELF"]."?action=showdate&date=".parent::getYear()."-".parent::getMonth()."-".parent::getDay()."\">".$font.parent::getDay()."</font></a>";
        }
}

?>
<html>
<head>
 <style type="text/css">  
 .align-center{  
     margin:0 auto;      /* 置中 這個是必須的,,其它的屬性非必須 */  
     width:789px;        /* 給個寬度 頂到瀏覽器的兩邊就看不出置中效果了 */  
    // background:red;     /* 背景色 */  
     text-align:center;  /* 文字等內容置中 */  
 }  
 </style>
</head>
<body>
<div class="align-center">
<?php
    //$cal= new TechCalendarForm(2009,10);
    $cal= new CalendarForm(2009,10);
    $cal->showCodeMonth();
?>
</div>
</body>
</html>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.