日历显示的PHP程序
- 点击日期后,捋显示当天的预定内容和追加按钮。
- 点击添加按钮后,捋显示可输入当天约会的HTML Form
- 利用预定输入的HTML Form点击保存按钮,可保存输入内容
- 提示:内容可以保存在COOKIE里

实现思路
利用GET请求判断输出哪个页面,用函数进行输出
if (isset($_GET["day"]) && isset($_GET["date"])) {
$date = $_GET["date"] . "-" . $_GET["day"];
//指定日期的提醒事项
dayPage($date);
} elseif (isset($_GET["save"]) && isset($_GET["msg"]) && isset($_GET["adate"])) {
$gmsg = htmlspecialchars($_GET["msg"]); //安全文字
//保存信息页面
savePage($_GET["adate"], $gmsg);
} elseif (isset($_GET["adate"]) && isset($_GET["add"])) {
//追加内容页面
addPage($_GET["adate"]);
} else {
//什么请求都没有的,初始的日历页面,或者a,b切换日历
initPage();
}
1. 初始的日历页面
默认显示当前的年月日历,可以点击上一年进行调整

代码:
在点击<<上一年的时候,会发送GET请求$as = a − 1 , 切 换 为 上 一 年 的 日 历 在 点 击 < < 上 个 月 的 时 候 , 会 发 送 G E T 请 求 a-1,切换为上一年的日历 在点击<<上个月的时候,会发送GET请求a−1,切换为上一年的日历在点击<<上个月的时候,会发送GET请求bs = $b-1,切换为上个月的日历
function initPage()
{
//初始的日历页面
date_default_timezone_set("ETC/GMT-8");//获取北京时间
if (isset($_GET["a"])) { //a、b为日历显示的年月
$a = $_GET["a"];
} else {
$a = date('y');
}
if (isset($_GET["b"])) {
$b = $_GET["b"];
if ($b > 12) {
$b = 1;
$a++;
}
if ($b < 1) {
$b = 12;
$a--;
}
} else {
$b = date('m');
}
$noe = mktime(0, 0, 0, $b, 1, $a); //获取当前的月的一号
$year = date("Y", $noe); //当前的年
$month = date("m", $noe); //当前的月
$week = date("w", $noe); // 每个月的一号是星期几
$days = date("t", $noe); //每个月的总天数
$as = $year - 1; //获取上一年的年
$bs = $month - 1; //获取上个月
$bx = $month + 1; // 获取下个月
$ax = $year + 1; //获取下一年
//初始的日历页面
global $header, $footer;
echo <<< "EOM"
{$header}
<div>
<h1>{$year}年{$month}月</h1>
<form>
<input type="radio" name="date" value="{$year}-{$month}" checked style="display:none">
<table cellpadding='3px' cellspacing='3px'>
<tr>
<th><a href="?a={$as}&b={$b}" ><<上一年</a></th>
<th><a href="?a={$a}&b={$bs}" ><<上个月</a></th>
<th> </th>
<th><a href="?a={$a}&b={$bx}" >下个月>></a></th>
<th><a href="?a={$ax}&b={$b}" >下一年>></a></th>
</tr>
<tr><th>星期日</th><th>星期一</th><th>星期二</th><th>星期三</th><th>星期四</th><th>星期五</th><th>星期六</th></tr>
<tr>
EOM;
for ($i = 0; $i < $week; $i++) {
echo "<td> </td>"; //获取当月一号前面的空格
}
for ($k = 1; $k <= $days; $k++) {
echo "<td><input type='submit' name='day' value='{$k}' style='border:0;background:white;'></td>"; //输出当月天数
if (($k + $week) % 7 == 0) {
echo "</tr><tr>"; // 一周七天换行
}
}
echo "</tr></table></form></div>";
echo $footer;
}
2. 追加内容页面
根据GET请求的add和date,展示要追加内容的日期,内容通过GET发送到保存页面进行保存
代码:
function addPage($adate)
{
//追加内容页面
global $header, $footer;
echo <<< "EOM"
{$header}
<div><h1>{$adate}の予定</h1>
<form>
<textarea name='msg'cols='80'rows='6'></textarea></br><br>
<input type='radio' name='adate' value='{$adate}' checked style='display:none'>
<input type='submit' name='save' value='保存' style='float:right'>
</form>
</div>
{$footer}
EOM;
}
3. 保存信息页面
先看当前日期是否有提醒事项保存,然后对字符串进行拼接,再次存入当前日期的cookie里,以便下次读取。
代码:
function savePage($adate, $gmsg)
{
//保存信息页面
global $header, $footer;
if (isset($_COOKIE[$adate])) {
$msg = $_COOKIE[$adate]; //读取保存的注意事项
$msg = $msg . "<li>" . $gmsg . "</li>";
} else {
$msg = "<li>" . $gmsg . "</li>";
}
setcookie($adate, $msg, time() + 60 * 60 * 24 * 30);
echo $header;
echo "<div><h1>登録しました</h1>";
echo "<a href='?' style='float:right;'>カレンダーを戻る</a></div>"; //返回日历页面
echo $footer;
}
4. 提醒事项页面
读取保存在当前日期的cookie。
代码:
function dayPage($date)
{
//提醒事项页面,追加按钮
global $header, $footer;
if (isset($_COOKIE[$date])) {
$daily = $_COOKIE[$date]; //保存提醒事项
} else {
$daily = "<li>ない</li>";
}
echo $header;
echo <<< "EOM"
<div><h1>{$date}</h1>
<ul>{$daily}</ul>
<form>
<input type='submit' name='add' value='追加' style="float:right;">
<input type='radio' name='adate' value='{$date}' checked style='display:none'>
</form>
EOM;
echo $footer;
}
5. 代码美化
可以放在php文件的最开始的地方
// HTML Header
$header = "<!DOCTYPE html><html lang='ja'><head>
<meta charset='UTF-8'><title>18160217</title>
<style>
td{text-align:center;}
h1{align:center;margin-left:100px;}
div{width:600px;}
</style></head><body>";
//HTML Footer
$footer = "</body></html>";
日历显示部分主要参考了:PHP实现的日历功能示例 https://www.jb51.net/article/146675.htm 部分修改
最后的话
如果要展示所有效果,把所有代码块里的代码复制到php文件里即可,
<?php 代码。。。版权声明:本文为weixin_43057454原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。