简单的PHP日历算法

简单的PHP日历算法

/**

* 日历

*

* Copyright(c) 2007 by 陈毅鑫(深空). All rights reserved

* To contact the author write to {@link mailto:shenkong@php.net}

* @author 陈毅鑫(深空)

*/

if (function_exists('date_default_timezone_set')) {

date_default_timezone_set('Asia/Chongqing');

}

$date = isset($_GET['date']) ? $_GET['date'] : date('Y-m-d');

$date = getdate(strtotime($date));

$end = getdate(mktime(0, 0, 0, $date['mon'] + 1, 1, $date['year']) - 1);

$start = getdate(mktime(0, 0, 0, $date['mon'], 1, $date['year']));

$pre = date('Y-m-d', $start[0] - 1);

$next = date('Y-m-d', $end[0] + 86400);

$html = '<table >';

$html .= '<tr>';

$html .= '<td><a href="' . $PHP_SELF . '?date=' . $pre . '">-</a></td>';

$html .= '<td colspan="5">' . $date['year'] . ';' . $date['month'] . '</td>';

$html .= '<td><a href="' . $PHP_SELF . '?date=' . $next . '">+</a></td>';

$html .= '</tr>';

$arr_tpl = array(0 => '', 1 => '', 2 => '', 3 => '', 4 => '', 5 => '', 6 => '');

$date_arr = array();

$j = 0;

for ($i = 0; $i < $end['mday']; $i++) {

if (!isset($date_arr[$j])) {

$date_arr[$j] = $arr_tpl;

}

$date_arr[$j][($i+$start['wday'])%7] = $i+1;

if ($date_arr[$j][6]) {

$j++;

}

}

foreach ($date_arr as $value) {

$html .= '<tr>';

foreach ($value as $v) {

if ($v) {

if ($v == $date['mday']) {

$html .= '<td><b>' . $v . '</b></td>';

} else {

$html .= '<td>' . $v . '</td>';

}

} else {

$html .= '<td>&nbsp;</td>';

}

}

$html .= '</tr>';

}

$html .= '</table>';

echo $html;