php 万年历
2013-08-23 18:15
218 查看
<?php header('Content-type:text/html;charset=utf-8'); error_reporting(E_ALL & ~E_NOTICE); $year = $_GET['y']?$_GET['y']:date('Y')+0; $month = $_GET['m']?$_GET['m']:date('m')+0; $dd = date('t',mktime(0,0,0,$month)); //本月一共有多少天 $w = date('w',mktime(0,0,0,$month,1,$year)); //本月的1号是星期几 if($w === '0') { $w=7; } echo '<center>'; echo '<h1>'.$year.'年'.$month.'月'.'</h1>'; echo '<table border=1 cellspacing=0>'; echo '<tr><th>星期一</th><th>星期二</th><th>星期三</th><th>星期四</th><th>星期五</th><th>星期六</th><th>星期日</th></tr>'; //循环输出数据 //方法一 // for($i=0;$i<ceil(($dd+$w-1)/7);$i++) //判断输出几行 // { // echo '<tr>'; // for($j=1; $j < 8 ; $j++) // { // $day=$i*7-$w+1+$j; //算出对应的天数 // if($day<=0 ||$day>$dd) // { // echo '<td></td>'; // } // else // { // echo '<td>'.$day.'</td>'; // } // } // echo '</tr>'; // } //方法二 $day =1 ; while($day<$dd) { echo '<tr>'; for($i=0;$i<7;$i++) { if($day<$dd &&($day!=1 || $w-1<=$i)) //唯一难点在于 $day!=1 || $w-1<=$i 可以反过来理解 见注① { echo '<td>'.$day.'</td>'; $day++; } else { //注① //$day=1 && $w-1>$i //$day=1 的时候 说明是第一行的时候,也就是刚开始写入数据 //如果 1号是 星期一 则不需要输入空格 $w=1 1要大于 $i(0) 就要 减去 1 所以 $w-1>$i //然后反过来,符号取反 && => || , = => != , > => <= echo '<td></td>'; } } echo '</tr>'; } echo '</table>'; //上一页 下一页 $previousy = $nexty =$year; $previousm = $month-1; $nextm = $month+1; if($previousm<1) { $previousm=12; $previousy-=1; }else if($nextm>12) { $nextm=1; $nexty+=1; } echo "<a href='4.php?y={$previousy}&m={$previousm}'>上个月</a> "; echo "<a href='4.php?y={$nexty}&m={$nextm}'>下个月</a>"; echo '</center>'; ?>