说到对日期和时间的处理,就一定要介绍一下日历程序的编写。但一提起编写日历,大多数读者都会认为日历的作用只是为了在页面上显示当前的日期,其实日历在我们的开发中有着更重要的作用。例如,我们开发一个“记事本”就需要通过日历设定日期,在一些系统中需要按日期去安排任务也需要日历,等等。
将日历类 Calendar 声明在文件 calendar.class.php中,代码如下所示:
calendar.class.php日历类
声明一个日历类,名称为Calendar,用来显示可以设置日期的日历
class
Calendar
{
private
$year
;
private
$month
;
private
$start_weekday
;
private
$days
;
* 构造方法,初始化一些属性
function
__construct
(
)
{
$this
->
year
=
isset
(
$_GET
[
"year"
]
)
?
$_GET
[
"year"
]
:
date
(
"Y"
)
;
$this
->
month
=
isset
(
$_GET
[
"month"
]
)
?
$_GET
[
"month"
]
:
date
(
"m"
)
;
$this
->
start_weekday
=
date
(
"w"
,
mktime
(
0
,
0
,
0
,
$this
->
month
,
1
,
$this
->
year
)
)
;
$this
->
days
=
date
(
"t"
,
mktime
(
0
,
0
,
0
,
$this
->
month
,
1
,
$this
->
year
)
)
;
* 打印整个日历
* @return string 日历字符串
function
__toString
(
)
{
$out
.=
'<table align="center">'
;
$out
.=
$this
->
changeDate
(
)
;
$out
.=
$this
->
weeksList
(
)
;
$out
.=
$this
->
daysList
(
)
;
$out
.=
'</table>'
;
return
$out
;
* 输出周列表
* @return string 周列表字符串
private
function
weeksList
(
)
{
$week
=
array
(
'日'
,
'一'
,
'二'
,
'三'
,
'四'
,
'五'
,
'六'
)
;
$out
.=
'<tr>'
;
for
(
$i
=
0
;
$i
<
count
(
$week
)
;
$i
++
)
{
$out
.=
'<th class="fontb">'
.
$week
[
$i
]
.
'</th>'
;
$out
.=
'</tr>'
;
return
$out
;
* 输出日列表
* @return string 日历表字符串
private
function
daysList
(
)
{
$out
.=
'<tr>'
;
for
(
$j
=
0
;
$j
<
$this
->
start_weekday
;
$j
++
)
{
$out
.=
'<td> </td>'
;
for
(
$k
=
1
;
$k
<=
$this
->
days
;
$k
++
)
{
$j
++
;
if
(
$k
==
date
(
'd'
)
)
{
$out
.=
'<td class="fontb">'
.
$k
.
'</td>'
;
}
else
{
$out
.=
'<td>'
.
$k
.
'</td>'
;
if
(
$j
%
7
==
0
)
{
$out
.=
'</tr><tr>'
;
while
(
$j
%
7
!=
0
)
{
$out
.=
'<td> </td>'
;
$j
++
;
$out
.=
'</tr>'
;
return
$out
;
* 用于处理当前年份的上一年需要的数据
* @param int $year 当前年份
* @param int $month 当前月份
* @return string 最终的年份和月份设置参数
private
function
prevYear
(
$year
,
$month
)
{
$year
=
$year
-
1
;
if
(
$year
<
1970
)
{
$year
=
1970
;
return
"year=
{
$year
}
&month=
{
$month
}
"
;
* 用于处理当前月份的上一月份的数据
* @param int $year 当前年份
* @param int $month 当前月份
* @return string 最终的年份和月份设置参数
private
function
prevMonth
(
$year
,
$month
)
{
if
(
$month
==
1
)
{
$year
=
$year
-
1
;
if
(
$year
<
1970
)
{
$year
=
1970
;
$month
=
12
;
}
else
{
$month
--
;
return
"year=
{
$year
}
&month=
{
$month
}
"
;
* 用于处理当前年份的下一年份的数据
* @param int $year 当前年份
* @param int $month 当前月份
* @return string 最终的年份和月份设置参数
private
function
nextYear
(
$year
,
$month
)
{
$year
=
$year
+
1
;
if
(
$year
>
2038
)
{
$year
=
2038
;
return
"year=
{
$year
}
&month=
{
$month
}
"
;
* 用于处理当前月份的下一个月份的数据
* @param int $year 当前年份
* @param int $month 当前月份
* @return string 最终的年份和月份设置参数
private
function
nextMonth
(
$year
,
$month
)
{
if
(
$month
==
12
)
{
$year
++
;
if
(
$year
>
2038
)
{
$year
=
2038
;
$month
=
1
;
}
else
{
$month
++
;
return
"year=
{
$year
}
&month=
{
$month
}
"
;
* 调整日期
* @param string $url 页面路径
* @return string 页面字符串
private
function
changeDate
(
$url
=
'index.php'
)
{
$out
.=
'<tr>'
;
$out
.=
'<td><a href="'
.
$url
.
'?'
.
$this
->
prevYear
(
$this
->
year
,
$this
->
month
)
.
'">'
.
'<<'
.
'</a></td>'
;
$out
.=
'<td><a href="'
.
$url
.
'?'
.
$this
->
prevMonth
(
$this
->
year
,
$this
->
month
)
.
'">'
.
'<'
.
'</a> </td>'
;
$out
.=
'<td colspan="3">'
;
$out
.=
'<form>'
;
$out
.=
'<select name="year" οnchange="window.location=\''
.
$url
.
'?year=\'+this.options[selectedIndex].value+\'&month='
.
$this
->
month
.
'\'">'
;
for
(
$sy
=
1970
;
$sy
<=
2038
;
$sy
++
)
{
$selected
=
(
$sy
==
$this
->
year
)
?
"selected"
:
""
;
$out
.=
'<option '
.
$selected
.
' value="'
.
$sy
.
'">'
.
$sy
.
'</option>'
;
$out
.=
'</select>'
;
$out
.=
'<select name="month" οnchange="window.location=\''
.
$url
.
'?year='
.
$this
->
year
.
'&month=\'+this.options[selectedIndex].value">'
;
for
(
$sm
=
1
;
$sm
<=
12
;
$sm
++
)
{
$selected1
=
(
$sm
==
$this
->
month
)
?
"selected"
:
""
;
$out
.=
'<option '
.
$selected1
.
' value="'
.
Ssm
.
'">'
.
$sm
.
'</option>'
;
$out
.=
'</select>'
;
$out
.=
'</form>'
;
$out
.=
'</td>'
;
$out
.=
'<td> <a href="'
.
$url
.
'?'
.
$this
->
nextMonth
(
$this
->
year
,
$this
->
month
)
.
'">'
.
'>'
.
'</a></td>'
;
$out
.=
'<td> <a href="'
.
$url
.
'?'
.
$this
->
nextYear
(
$this
->
year
,
$this
->
month
)
.
'">'
.
'>>'
.
'</a></td>'
;
$out
.=
'</tr>'
;
return
$out
;
本例将一个日历程序按功能拆分(周列表部分、日期列表部分、设置日期部分,以及上一年、下一年、上一月和下一月的设置部分)并封装在一个日历类中。有了日历类,我们还需要编写一个主程序去加载并输出日历。在主程序中还需要先设置一下日历输出的样式,代码如下所示:
<!DOCTYPE html>
<html lang="en">
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>日历示例</title>
<style>
table{ border: 1px solid
.fontb{ color:white;background:blue; }
th { width: 30px; }
td,th { height: 30px;text-align:center; }
form { margin: 0px;padding: 0px; }
</style>
</head>
<?php
require 'calendar.class.php';
echo new Calendar;
</body>
</html>
运行效果如下如所示:
实例说明说到对日期和时间的处理,就一定要介绍一下日历程序的编写。但一提起编写日历,大多数读者都会认为日历的作用只是为了在页面上显示当前的日期,其实日历在我们的开发中有着更重要的作用。例如,我们开发一个“记事本”就需要通过日历设定日期,在一些系统中需要按日期去安排任务也需要日历,等等。实现过程将日历类 Calendar 声明在文件 calendar.class.php中,代码如下所示:<?php/* calendar.class.php日历类 声明一个日历类,名称为Calendar,用来显
复制代码 代码如下:<?php $monthoneday=date(“Ym”).”01″; $oneweekday=date(“w”,strtotime($monthoneday)); //获得本月1号星期几 $monthday=date(“t”); //本月多少天 $startlow=($oneweekday==0)?7:$oneweekday; //从第几列开始 for($a=1,$b=$startlow;$a<=$monthday;$a++,$b++){ $ary[$b]=$a; //用数组控制日期在哪里输出 } $c=1; //输出行数等于当月天数除7取整再加1 for($a=1;$a
//设置中国时区时间
if (function_exists('date_default_timezone_set')){
date_default_timezone_set('PRC');
//格式化提交数据
function post_input($data){
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
//判断获取
$year = isset($_GET['y']) ? post_input($_GET['y']): date('Y');
//当前
月份
$month = isset($_GET['m']) ? post_input($_GET['m']): date('m');
//当前日子
$day = isset($_GET['d']) ? post_input($_GET['d']): date('d');
//设置
月份转化年份规则
if ($month > 12){
$month = 1;
$year++;
}elseif ($month < 1){
$month = 12;
$year--;
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>月历表</title>
<?php
$MONTH = array("元月","一月","二月","
制作一个智能问答系统,系统根据存储于文本文件中的用户信息判断用户是否是合法登录。用户登录后可以进行智力问答,回答完后,系统会计算其所得分数。
@[toc](PHP互动网页)
(1)制作登陆表单
先建立一个info.txt的文本文件在其中保存用户的信息,有用户名、密码两个信息,中间用“|”隔开,如输入以下几行数据:
user1|123456
user2|654321
user3|111111
新建login.php文件(用户登录页面),输入以下代码:
<style type="text/c