博客列表 >用php循环语句实现日历查询 2018年4月13日

用php循环语句实现日历查询 2018年4月13日

墨雨的博客
墨雨的博客原创
2018年04月15日 00:03:52736浏览

1.前端代码m.php

实例

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>月历生成器</title>
	<style type="text/css">
		.form {
			width:400px;
			background-color: lightgreen;
		}
		p{
			text-align: center;
		}
		button {
			width: 80px;
			height: 26px;
			border: none;
			background-color: lightskyblue;
			color:white;
			margin: 0 10px 0 10px;
		}
	    button:hover {
			background-color: orange;
			cursor: pointer;
		}	
	</style>
	</head>
<body>
	<div class="form">
		<fieldset>
			<legend>月历生成器</legend>
			<p>请输入年月:
				<input type="text" name="year" size="2">
				年
				<input type="text" name="month" size="1">
				月
			</p>
			<p><button>生成月历</button><button>重置</button></p>

		</fieldset>
	</div>
	<script type="text/javascript" src="../jquery-3.3.1.js"></script>
	<script type="text/javascript">
		var flag = true   	//创建请求标志,初始允许发送请求
		$('button').eq(0).on('click',function(){
			//遍历并验证用户的输入的年和月的值	
			$('input:input').each(function(index,obj){
				//非空判断
				var invar=$(obj).val()
				if (invar.length == 0) {
					//在当前元素后添加提示信息
					$('p').eq(0).after('<span style="color:red">年月不能为空</span>')
					setTimeout(function(){
						$('p').eq(0).next().remove()
						$(obj).focus()
					},2000)
					return false
					//非数字判断
				} else if (isNaN(invar)) {
					$('p').eq(0).after('<span style="color:red">年月必须是数字</span>')
					setTimeout(function(){
						$('p').eq(0).next().remove()
						$(obj).focus()
					},2000)
					return false
					//年份输入合理性判断
				} else if (index==0 && (invar<1903 || invar>2037)) {
					$('p').eq(0).after('<span style="color:red">输入的年超出范围</span>')
					setTimeout(function(){
						$('p').eq(0).next().remove()
						$(obj).focus()
					},2000)
					return false
					//月份输入合理性判断
				} else if (index==1 && (invar<1 || invar>12)) {
					$('p').eq(0).after('<span style="color:red">输入的月份超出范围</span>')
					setTimeout(function(){
						$('p').eq(0).next().remove()
						$(obj).focus()
					},2000)
					return false
				}

			})

			// 用ajax处理请求
			if (flag == true) {
				$.get(
					//1.请求处理的脚本
					'm-1.php',
					//2.发送的请求参数
					{
						year: $('input:input').eq(0).val(),
						month: $('input:input').eq(1).val()
					},
					//3.请求成功的回调函数
					function(data){
					//先将上一次生成的日历删除
					$('.form').next().remove()
					//生成新的日历
					$('.form').after(data)
					//将请求标志设置为false,禁止重复请求
					flag = false
				}
			)
			}	
		})

		//重置按钮
		$('button').eq(1).click(function(){
			//将行与列数据全部清空,焦点回到第一个input控件
			$('input:input').val('')
			$('input:input').eq(0).focus()
			//将上一次请求生成的日历删除
			$('.form').next().remove()
			//重置请求状态为true:允许发送请求
			flag = true
		})
	</script>
</body>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例

2.服务器端代码m-1.php

实例

<?php
//判断请求是否合法,必须是GET请求
if ($_SERVER['REQUEST_METHOD'] == 'GET') {
	$year = $_GET['year'];
	$month = $_GET['month'];
	//创建表格的基本架构,采用字符串拼接方式,最后统一生成
	$table = '<table border="1" cellspacing="0" cellpadding="3" width="400">';
	//日历标题
	$table.= '<caption><h2>'.$year.'年'.$month.'月份</h2></caption>';

	//生成星期栏
	$aweek=array('日','一','二','三','四','五','六');
	$table .= '<tr align="center" bgcolor="lightgreen">';
	for ($i=0; $i<7; $i++) {
		$table .= '<th>星期'.$aweek[$i].'</th>';
	}
	$table .= '</tr>';
	$mweek=date('w',strtotime($year."-".$month."-1")); //本月1日星期几
    $mday=date('t',strtotime($year."-".$month."-1")); //本月总天数
    //计算日历主体部分的行数
    if ((intval($mday)-7+intval($mweek))%7==0) {
	    $hh=floor((intval($mday)-7+intval($mweek))/7)+1;
    } else{
	    $hh=floor((intval($mday)-7+intval($mweek))/7)+2;
    }
	//用双重循环来生成日历主体
	for ($r=0; $r<$hh; $r++) {
		$table .= '<tr>';
		for($c=1; $c<=7; $c++) {
			//设置单元格的数据,数据与单元格数量对应
			$data=$r*7+$c-intval($mweek);
			if ($data<=0 || $data>intval($mday)) {
				$data="";
			}
			$table .= '<td align="center">'.$data.'</td>';
		}
		$table .= '</tr>';
	}
	$table .= '</table>';
	//将生成的日历返回到客户端
	echo $table;
	exit(); //结束当前脚本,可以省略

} else {
	exit('<span style="color:red">请求类型错误</span>');
}

运行实例 »

点击 "运行实例" 按钮查看在线实例

3.代码执行效果截图:

20180414234324.png

总结:

本次作业主要练习php的循环语句(for)和条件判断语句(if-else),为要实现日历显示,学习了date()、intval()等函数的用法,日期位置显示算法自己不满意,一定还可以优化。


声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议