做了日历
效果图:




做日历的话,先得获取时间,我是通过表单提交来获取时间的。
获取到时间后需要获取年份,月份
然后获取当月的总天数,1号是星期几
然后后计算当月总的星期数:总的星期数是当月总天数加上1号星期数再除以一个星期的天数
计算式子如下:
当月星期数 = 当月总天数+1号星期数/7
然后通过两层循环整合数据
第一层循环控制星期数,第二层循环控制日期
代码如下:
<?php
// 获取时间
$input = $_GET['time'];
// 给时间默认值
$input = $input ?? '2021-2-1 0:0:0';
// 获取时间戳
$time = strtotime($input);
// 获取年份
$year = date('Y', $time);
// 获取月份
$month = date('m', $time);
// 获取1号的的时间戳
$time = strtotime($year . '-' . $month . '-1 0:0:0');
// 获取当前月1号的总天数
$totalDay = date('t', $time);
// 获取当前月1号的第一个星期的星期数
$firstWeek = date('w', $time);
// 获取计算星期数的总天数
$countDay = $totalDay + $firstWeek;
// 计算总星期数
$weekS = ceil($countDay / 7);
// 日期容器
$day = [];
// 计数器
$tem = 0;
// 星期数
for ($i = 0; $i < $weekS; $i++) {
// 没星期的日期
for ($j = 0; $j < 7; $j++) {
// 当第一个星期时小于1号前面的数据是空的,当超过总天数时,后面的数据是空的
if (($i == 0 && $j >= $firstWeek) || $i > 0 && $tem < $totalDay) {
$day[$i][$j] = ++$tem;
} else {
$day[$i][$j] = '';
}
}
}
// echo '<pre>',$totalDay;
// var_dump($day);
?>
<!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>
<form>
<input type="date" name='time'>
<input type="submit">
</form>
<h1><?php echo date('Y年m月', $time) ?>的日历</h1>
<table border="1">
<tr>
<th>星期天</th>
<th>星期一</th>
<th>星期二</th>
<th>星期三</th>
<th>星期四</th>
<th>星期五</th>
<th>星期六</th>
</tr>
<?php foreach ($day as $k => $v) { ?>
<tr>
<?php foreach ($v as $vv) { ?>
<td><?= $vv ?></td>
<?php } ?>
</tr>
<?php } ?>
</table>
</body>
</html>

浙公网安备 33010602011771号