做了日历

效果图:

 

 

 

 

 

做日历的话,先得获取时间,我是通过表单提交来获取时间的。
获取到时间后需要获取年份,月份
然后获取当月的总天数,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>

  

 

posted @ 2021-12-11 14:51  陈井泉的博客  阅读(43)  评论(0)    收藏  举报