🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
function calendarData($year, $month, $day, $list){ # 1 判断当前年、月 有多少天 $unix_time = mktime(0, 0, 0, $month, 1, $year); $total_day = intval(date('t', $unix_time)); $month_date = array(); $month_string = $month > 10 ? $month : '0'.$month; for($i=1; $i<=$total_day; $i++){ $day_string = $i > 10 ? $i : '0'.$i; $month_date[$i] = $year.'-'.$month_string.'-'.$day_string; } // dd($month_date); # 2 声明数组,用来记录表所有行的数据 $rows = array(); # 3 判断当前月的第一天,是周几 $first_day_week = intval(date('w', $unix_time)); # 4 声明数组,用来记录表单行记录 $row = array(); for ($i = 0; $i < $first_day_week; $i++){ $row[] = array(); } # 5 依次的循环日期数,把每天的数据放入当天数据集合,把每日数据集合放入单行,当 $i % 7 时,说明是下一个星期,需要换行 foreach($month_date as $date){ # 每日数据集合 $day_data = array(); foreach($list as $v){ if ($date == $v['operate_date']) { $day_data[] = $v; } } # 单行数据 $row[] = $day_data; $i++; # 换行并清空单行数据 if($i % 7 == 0){ $rows[] = $row; $row = array(); } } # 6 所有日期都循环后,判断是否到了表格末尾,如果没到,用空格填充,并放入所有行记录的最后一行 while ($i % 7 != 0) { $i++; $row[] = array(); } if(!empty($row)){ $rows[] = $row; } # 表头 $th = array( '星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六', ); # 循环表头和$rows展示数据 } /* * 日历函数 */ /** * 输出当前年、月的日历 * 2015年6月13日 * @author gaoqing * @param int $year 年 * @param int $month 月 * @param int $day 当前日期 * @return void 空 */ function calendar($year, $month, $day){ /* * 1、判断当前年、月 有多少天 * 2、输出基本的日历的框架 * 3、判断当前月的第一天,是周几 * 4、循环所有的天数,填满日历 */ //1、判断当前年、月 有多少天 $unix_time = mktime(0, 0, 0, $month, 1, $year); //$total_day = cal_days_in_month(CAL_GREGORIAN, $month, $year); $total_day = intval(date('t', $unix_time)); //2、输出基本的日历的框架 echo "<table border = '0' style = 'text-align:center; width: 800px;' >"; echo "<tr>"; echo "<th>星期日</th>"; echo "<th>星期一</th>"; echo "<th>星期二</th>"; echo "<th>星期三</th>"; echo "<th>星期四</th>"; echo "<th>星期五</th>"; echo "<th>星期六</th>"; echo "</tr>"; $th = array( '星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六', ); $row = array(); $row[] = $th; //3、判断当前月的第一天,是周几 $first_day_week = intval(date('w', $unix_time)); /* * 4、循环所有的天数,填满日历 * 4.1、首先填充第一行,根据第一天的星期数,填充空白 * 4.2、依次的循环日期数,当 $i % 7 时,说明是下一个星期,需要换行 * 4.3、所有日期都循环后,判断是否到了表格末尾,如果没到,用空格填充 */ echo "<tr>"; //4.1、首先填充第一行,根据第一天的星期数,填充空白 for ($i = 0; $i < $first_day_week; $i++){ echo "<td>&nbsp;</td>"; } //4.2、依次的循环日期数,当 $i % 7 时,说明是下一个星期,需要换行 for ($j = 1; $j <= $total_day; $j++){ if ($j == $day) { echo "<td style = 'background: red;' >{$j}</td>"; }else { echo "<td>{$j}</td>"; } $i++; if($i % 7 == 0){ echo "</tr><tr>"; } } //4.3、所有日期都循环后,判断是否到了表格末尾,如果没到,用空格填充 while ($i % 7 != 0) { $i++; echo "<td>&nbsp;</td>"; } echo "</tr>"; echo "</table>"; }