PHP实例————万年历

和大家分享一个简易的万年历制作过程。

基本要求:

1.获取日期

2.获取给定日期是几号

3.获取给定日期是周几

4.获取月份天数

5.获取上一月和下一月

先贴一张效果图,样式做的比较丑,不喜勿喷。


php代码:

<?php

	//修改字符编码
	header("content-type:text/html;charset=utf-8");

	//外部样式链接
	echo "<link rel='stylesheet' type='text/css' href='calendar.css'/>";

	//获取当前年
	$year=$_GET['Y']?$_GET['Y']:date('Y');

	//获取当前月
	$month=$_GET['m']?$_GET['m']:date('m');

	//获取当月有多少天
	$days=date('t',strtotime("{$year}-{$month}-1"));

	//当前是周几
	$week=date('w',strtotime("{$year}-{$month}-1"));

	//内容居中显示
	echo "<center>";

	//打印表头
	echo "<h1>{$year}年{$month}月</h1>";

	//打印日期表格
	echo "<table>";

	//打印星期
		echo "<tr>";
			echo "<th>周日</th>";
			echo "<th>周一</th>";
			echo "<th>周二</th>";
			echo "<th>周三</th>";
			echo "<th>周四</th>";
			echo "<th>周五</th>";
			echo "<th>周六</th>";
		echo "</tr>";

	//打印几号
	for($i=1-$week;$i<=$days;){
		echo "<tr>";
		for($j=0;$j<7;$j++){
			if($i>$days||$i<1){
				echo "<td> </td>";
			}else{
				echo "<td>$i</td>";
			}
			$i++;
		}
		echo "</tr>";
	}
	echo "</table>";

	//上一月和下一月算法
	if($month==1){
		$prevyear=$year-1;
		$prevmonth=12;
	}else{
		$prevyear=$year;
		$prevmonth=$month-1;
	}
	if($month==12){
		$nextyear=$year+1;
		$nextmonth=1;
	}else{
		$nextyear=$year;
		$nextmonth=$month+1;
	}

	//上一月和下一月的超链接
	echo "<h2><a href='indextest.php?Y={$prevyear}&m={$prevmonth}'>上一月</a>&<a href='indextest.php?Y={$nextyear}&m={$nextmonth}'>下一月</a></h2>";

	echo "</center>";
?>

CSS代码:

table{
	width:500px;
	height:300px;
	border:red dashed 1px;
	background:#ff00ff;
}
tr{
	text-align:center;
}
td{
	border:gray dotted 1px;
}
h1{
	font-style:italic;
	font-size:50px;
	font-family:'宋体';
}
h2 a{
	font-style:normal;
	font-size:40px;
	font-family:'黑体';
	color:purple;
}
/*组合选择器*/
tr,td,th{
	font-size:20px;
	background:gray;
}

说几点比较容易出错和用法巧妙的地方:

1.strtotime()中所计算的时间戳应该是完整的一个格式,把一个单独的年或月放进去是没有用的。

2.if语句中的条件里面,不是赋值,是等于!!!,要写 两个==。这地方太容易给忽略了。

3.原本打印的日期一直都是周日和一号对应。但是月份不同,这个日期和星期的对应关系也会有所改变,所以,在for循环中将$i-$week.就可以将当月的所有日期后退一定时间,达到日期与星期的完美对应。

4.在实现上一月和下一月的功能时,将几个变量作为参数带入,再配合一定的算法就能搞定了。具体的就看代码吧,文字也得再好也不如看两行代码效果好。


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。