【长达x年半个人PHP练习生之——日历制作】
一、设置时区首先设置我们的时区,一个日历的制作肯定要有时间的嘛如下:date_default_timezone_set (“PRC“);这段代码中PRC是中国的意思,这段代码是把默认时区设置成了中国标准时间。二、使用步骤1.引入库代码如下(示例):import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport s
一、设置时区
首先设置我们的时区,一个日历的制作肯定要有时间的嘛
如下:
date_default_timezone_set("PRC"); //设置时区
这段代码中PRC是中国的意思,这段代码是把 默认时区设置成了中国标准时间。
二、以表格形式输出日历
echo "<style>table{margin:0 auto}td{border:1px solid black}</style>";
$w_arr=array("星期日","星期一","星期二","星期三","星期四","星期五","星期六");
echo "<table><tr>";
for($i=0;$i<count($w_arr);$i++){
echo "<td>$w_arr[$i]</td>";
}
输出结果:
先输出表格样式,让后创建一个名为 $w_arr 的星期数组,在用 for循环 输出表格。
为什么星期日会在第一个格子呢?因为我们要用 date()函数 获取某天是星期几,用到的是这个函数里面的 “w",date("w") 又表示星期几的数字,如:星期日是0,星期六是6......
然后这个月的第一天就会从那个星期几开始。
然后定义一下我们的 年 月 日~
$year = date("Y"); //本年度的年份 Y 为年份的四位数表达
$month = date("m"); //本月的月份 m 月份的数字表示 (01~12)
$day = date("j"); //获取当天的天数 j 为不带前导零 如:(1~12) 为了日历美观
让后获取这个月第一天是星期几
$fday = date("w", mktime(0, 0, 0, $month, 1, $year));
结果:
因为我们获取的date("Y”);、date("m");是本年本月份的,然后现在是4月份,我们输出了一下这个
$fday的值显示为 “ 5 (星期五) “,而这段代码的解释呢就是:
先用 mktime() 获取 今年现在这个月份一号的时间戳,当然这个$month和$year中间的 ”1“ 也可以去掉,因为它本来就是获取这个月份第一天是星期几,但这里为了严谨一点,然后用 date("w"); 将这个月份第一天转换成星期几的数字形式。
$num = $fday + date("t", mktime(0, 0, 0, $month, 1, $year)); //计算星期几加上当月的天数 共需要多少个格子
然后定义一个变量来计一共需要多少个表格,为什么呢?如下图所示
这下就简单明了了,上面用的获取第一天为星期几就排上用场了,$fday计的值为5,然后可以理解为就有五个空格子,如果大于等于这个第一天的值的时候开始输出日期:
for ($i = 0; $i < $num; $i++){
$date = $i+1;//设置输出的日期变量
//输出所有的格子,最大格子数为$num;
if ($i % 7 == 0) {
echo "<tr>"; //加个判断,日历的一行有7个格子
}
echo "<td>";//然后输出格子
if ($i >= $wd) { //这里开始判断,日历第一天的开始
if ($date == $day && $month == date("n") && $year == date("Y")) {
//如果恰好是系统当天的日期则将当天日期设置为红色并加粗
echo "<b><font color='orange'>" . $day . "</font></b>";
} else {
echo $date; //输出日期
}
echo "</td>";//如果以上都没有就是空格子
}
但是发现结果是这样的:
它的第一天是从6开始的,这是为什么呢?
于是乎开始苦逼的寻找bug了 T_T
然后发现了问题所在!!!
因为for循环里面的$date = $i+1;随着 i++ 它 $date 的值会不断自增,到了符合if ($i >= $fday)的时候开始输出,此时的 $date 是大于这个 if 判断语句的,但他的值却不再是 1 ,然后这里应该是忘记前面要减去的五个空格 ,于是修改了这段代码:$date = $i+1-$fday; 然后这个小bug被解决了!
最后放上完整的php日历代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<?php
echo "<style>table{margin:0 auto}td{border:1px solid black}</style>";
$w_arr = array("星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六");
echo "<table><tr>";
for ($i = 0; $i < count($w_arr); $i++) {
echo "<td>$w_arr[$i]</td>";
}
echo "</td>";
$year = date("Y"); //本年度的年份 Y 为年份的四位数表达
$month = date("m"); //本月的月份 m 月份的数字表示 (01~12)
$day = date("j"); //获取当天的天数 j 为不带前导零 如:(1~12) 为了日历美观
$fday = date("w", mktime(0, 0, 0, $month, 1, $year)); //获取第一天是星期几
$num = $fday + date("t", mktime(0, 0, 0, $month, 1, $year)); //计算星期几加上当月的天数 共需要多少个格子
for ($i = 0; $i < $num; $i++) {
$date = $i + 1 - $fday;
if ($i % 7 == 0) {
echo "<tr align=center>"; //一行的开始
}
echo "<td>";
if ($i >= $fday) {
if ($date == $day && $month == date("n") && $year == date("Y")) {
//如果恰好是系统当天的日期则将当天日期设置为红色并加粗
echo "<b><font color='orange'>" . $day . "</font></b>";
} else {
echo $date; //输出日期
}
echo "</td>";
}
}
?>
</body>
</html>
总结
菜要多练......
更多推荐
所有评论(0)