<?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>';
?>
php 万年历
最新推荐文章于 2024-09-08 08:42:10 发布