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