php简单的日历程序代码
PHP提供了date()函数,该函数提供了丰富的日期处理功能。现在需要获得的数据有两个,第一个是当月的总天数;第二个是该月的第一天所在星期中的第几天,数字表示0(表示星期天)到6(表示星期六)。
通过date()函数可以很容易获得上面的数据
<?php $month = $_GET['m'] ? $_GET['m'] : date('n'); $year = $_GET['y'] ? $_GET['y'] : date('Y'); $start_week = date('w', mktime(0, 0, 0, $month, 1, $year)); $day_num = date('t', mktime(0, 0, 0, $month, 1, $year)); $end = false; ?> <table> <tr> <td>星期日</td><td>星期一</td><td>星期二</td><td>星期三</td><td>星期四</td><td>星期五</td><td>星期六</td> </tr> <tr> <?php for ($i = 0; $i < $start_week; $i++) { echo "<td></td>"; } $j = 1; while ($j <= $day_num) { echo "<td>$j</td>"; $week = ($start_week + $j - 1) % 7; if ($week == 6) { echo "nt</tr>n"; if ($j != $day_num) echo "t<tr>ntt"; else $end = true; } $j++; } while ($week % 7 != 6) { echo "<td></td>"; $week++; } if (!$end) echo "n</tr>"; ?> </table>
高级一点类
<?php class Calendar { private $year; private $month; private $weeks = array( '日', '一', '二', '三', '四', '五', '六' ); function __construct($options = array()) { $this->year = date('Y'); $this->month = date('m'); $vars = get_class_vars(get_class($this)); foreach ($options as $key => $value) { if (array_key_exists($key, $vars)) { $this->$key = $value; } } } function display() { echo '<table class="calendar">'; $this->showChangeDate(); $this->showWeeks(); $this->showDays($this->year, $this->month); echo '</table>'; } private function showWeeks() { echo '<tr>'; foreach ($this->weeks as $title) { echo '<th>' . $title . '</th>'; } echo '</tr>'; } private function showDays($year, $month) { $firstDay = mktime(0, 0, 0, $month, 1, $year); $starDay = date('w', $firstDay); $days = date('t', $firstDay); echo '<tr>'; for ($i = 0; $i < $starDay; $i++) { echo '<td> </td>'; } for ($j = 1; $j <= $days; $j++) { $i++; if ($j == date('d')) { echo '<td class="today">' . $j . '</td>'; } else { echo '<td>' . $j . '</td>'; } if ($i % 7 == 0) { echo '</tr><tr>'; } } echo '</tr>'; } private function showChangeDate() { $url = basename($_SERVER['PHP_SELF']); echo '<tr>'; echo '<td><a href="?' . $this->preYearUrl($this->year, $this->month) . '">' . '<<' . '</a></td>'; echo '<td><a href="?' . $this->preMonthUrl($this->year, $this->month) . '">' . '<' . '</a></td>'; echo '<td colspan="3"><form>'; echo '<select name="year" onchange="window.location=''.$url.' ? year = '+this.options[selectedIndex].value+' & month = '.$this->month.''">'; for ($ye = 1970; $ye <= 2038; $ye++) { $selected = ($ye == $this->year) ? 'selected' : ''; echo '<option ' . $selected . ' value="' . $ye . '">' . $ye . '</option>'; } echo '</select>'; echo '<select name="month" onchange="window.location=''.$url.' ? year = '.$this->year.' & month = '+this.options[selectedIndex].value+''">'; for ($mo = 1; $mo <= 12; $mo++) { $selected = ($mo == $this->month) ? 'selected' : ''; echo '<option ' . $selected . ' value="' . $mo . '">' . $mo . '</option>'; } echo '</select>'; echo '</form></td>'; echo '<td><a href="?' . $this->nextMonthUrl($this->year, $this->month) . '">' . '>' . '</a></td>'; echo '<td><a href="?' . $this->nextYearUrl($this->year, $this->month) . '">' . '>>' . '</a></td>'; echo '</tr>'; } private function preYearUrl($year, $month) { $year = ($this->year <= 1970) ? 1970 : $year - 1; return 'year=' . $year . '&month=' . $month; } private function nextYearUrl($year, $month) { $year = ($year >= 2038) ? 2038 : $year + 1; return 'year=' . $year . '&month=' . $month; } private function preMonthUrl($year, $month) { if ($month == 1) { $month = 12; $year = ($year <= 1970) ? 1970 : $year - 1; } else { $month--; } return 'year=' . $year . '&month=' . $month; } private function nextMonthUrl($year, $month) { if ($month == 12) { $month = 1; $year = ($year >= 2038) ? 2038 : $year + 1; } else { $month++; } return 'year=' . $year . '&month=' . $month; } } ?>
调用方法
<?php $params = array(); if (isset($_GET['year']) && isset($_GET['month'])) { $params = array( 'year' => $_GET['year'], 'month' => $_GET['month'], ); } $params['url'] = 'demo.php'; require_once 'calendar.class.php'; ?> <html> <head> <title>日历demo</title> <meta http-equiv="Content-Type" content="text/html" charset="UTF-8" /> <style type="text/css"> table.calendar { border: 1px solid #050; } .calendar th, .calendar td { width:30px; text-align:center; } .calendar th { background-color:#050; color:#fff; } .today{ color:#fff; background-color:#050; } </style> </head> <body> <div style="align:center"> <?php $cal = new Calendar($params); $cal->display(); ?> </div> </body> </html>
本文地址:http://www.phprm.com/frame/php1005320.html
转载随意,但请附上文章地址:-)