首先,给大家展示一下效果图。
功能包括:年份和月份查询,上一年、下一年、上一月、下一月和回到今天这几个功能。
项目文件
项目代码
1.php
<?php
echo "<pre>";
//设置时区
//date_default_timezone_set('America/New_York');
//1.获取时间戳
var_dump(time());
//2.格式化时间戳
var_dump(date('Y-m-d H:i:s',time()));
//3.将一个指定的日期时间转换为时间戳
//var_dump(mktime('时','分','秒','月','日','年'));
var_dump(mktime('10','30','59','12','30','2001'));
//4.将一个字符串格式的日期,转换为时间戳
var_dump(date('Y-m-d H:i:s',strtotime("+1day"))); //明天的现在这个时候
var_dump(date('Y-m-d H:i:s',strtotime("-1day"))); //昨天的现在这个时候
var_dump(date('Y-m-d H:i:s',strtotime("-1week"))); //上周的现在这个时候
var_dump(date('Y-m-d H:i:s',strtotime("-1month"))); //上个月的现在这个时候
var_dump(date('Y-m-d H:i:s',strtotime("-1year"))); //上个月的现在这个时候
var_dump(date('Y-m-d H:i:s',strtotime("-1year +1month +2week +2day"))); //上个月的现在这个时候
?>
calendar_new.php
<!DOCTYPE html>
<html>
<head>
<title>万年历</title>
<meta charset="utf-8"/>
</head>
<body>
<?php
//获取用户查询的年份和月份
$year = isset($_GET['year'])==true ? $_GET['year'] : date('Y');
$month = isset($_GET['month'])==true ? $_GET['month'] : date('m');
//只对$_GET有效
// $year = $_GET['year'] ?? date('Y');
// $month = $_GET['month'] ?? date('m');
$new_year = date('Y',time());
// echo $new_year;
$new_month = date('m',time());
// echo $new_month;
$new_days = date('d',time());
//获取当前月第一天的时间戳
$time = mktime(0,0,0,$month,1,$year);
//1.首先,获取万年历前方的空格
$first = date('N',$time)-1; //0
//2.然后,获得当前月的天数
$days = date('t',$time); //30
//3.最后,求得万年历后方的空格
$last = 42-$first-$days //12
?>
<center>
<h2>万年历</h2>
<h3><?= $year ?> 年 <?= $month ?> 月</h3>
<form action="./calendar_new.php" method="get">
年份:<select name='year'>
<?php
for($y=1970; $y<=2100; $y++){
if($y==$year){
echo "<option selected value='{$y}'>{$y} 年</option>";
}else{
echo "<option value='{$y}'>{$y} 年</option>";
}
}
?>
</select>
月份:<select name='month'>
<?php
for($m=1; $m<=12; $m++){
if($m==$month){
?>
<option selected value="<?= $m ?>"><?= $m ?> 月</option>
<?php
}else{
?>
<option value="<?= $m ?>"><?= $m ?> 月</option>
<?php
}
}
?>
</select>
<input type="submit" value="查询"/>
</form>
<br/>
<table border='1' width='800' cellspacing='0' cellpadding='5'>
<tr>
<th>一</th>
<th>二</th>
<th>三</th>
<th>四</th>
<th>五</th>
<th>六</th>
<th>日</th>
</tr>
<tr align='center'>
<?php
//定义一个统计单元格个数的空变量
$num = 0;
$new_days = date('d',time());
//1.循环表格中前方的空格
for($i=1; $i<=$first; $i++){
echo "<td> </td>";
++$num;
//判断单元格是否到达7的倍数
if($num%7==0){
echo "</tr><tr align='center'>";
}
}
//2.循环表格中中间的日期
for($j=1; $j<=$days; $j++){
// echo $year;
// echo $month;
if(($j==$new_days) && ($year==$new_year) && ($month==$new_month) ){
echo "<td><font color=red>{$j}</font></td>";
++$num;
}else{
echo "<td>{$j}</td>";
++$num;
}
//判断单元格是否到达7的倍数
if($num%7==0){
echo "</tr><tr align='center'>";
}
}
//3.循环表格最后的空格
for($k=1; $k<=$last; $k++){
echo "<td> </td>";
++$num;
//判断单元格是否到达7的倍数
if($num%7==0){
echo "</tr><tr align='center'>";
}
}
?>
</tr>
</table>
<br/>
<a href="./calendar_new.php?year=<?= $year-1 ?>&month=<?= $month ?>">上一年</a>
<a href="./calendar_new.php?year=<?= $prevy ?>&month=<?= $prevm ?>">上一月</a>
<a href="./calendar_new.php">回到今天</a>
<a href="./calendar_new.php?year=<?= $nexty ?>&month=<?= $nextm ?>">下一月</a>
<a href="./calendar_new.php?year=<?= $year+1 ?>&month=<?= $month ?>">下一年</a>
</center>
</body>
</html>
大家可以直接复制代码,放到对应的文件名里就可以运行。适合初学php的人学习使用。