<?php /** * 获取日历数据 * @param $year 年 * @param $month 月 * @return array */ function getCalendarData($year, $month) { $monthResult = []; $isFirstWeek = true; $firstWeek = []; $middleWeek = []; $lastWeek = []; //1、判断当前年、月 有多少天 $unix_time = mktime(0, 0, 0, $month, 1, $year); $mont_day = intval(date('t', $unix_time)); //2、判断当前月的第一天,是周几 $first_day_week = intval(date('w', $unix_time)); for ($i = 0; $i < $first_day_week; $i++) { $firstWeek[] = ''; } //3、依次的循环日期数,当 $i % 7 时,说明是下一个星期,需要换行 for ($j = 1; $j <= $mont_day; $j++) { $i++; if ($isFirstWeek) { if (count($firstWeek) == 7) { $isFirstWeek = false; $monthResult[] = $firstWeek; $middleWeek[] = $j; } else { $firstWeek[] = $j; } } else { $middleWeek[] = $j; } if ($i % 7 == 0) { if (!empty($middleWeek)) { $monthResult[] = $middleWeek; $middleWeek = []; } } if ($j == $mont_day) { $lastWeek = $middleWeek; } } //4、所有日期都循环后,判断是否到了表格末尾,如果没到,用空格填充 while ($i % 7 != 0) { $i++; $lastWeek[] = ''; } if(!empty($lastWeek)){ $monthResult[] = $lastWeek; } return $monthResult; } //获取2020年5月的日历数据 $result = getCalendarData(2020, 5); echo "<pre>"; print_r($result);
结果如下:
array:6 [▼ 0 => array:7 [▼ 0 => "" 1 => "" 2 => "" 3 => "" 4 => "" 5 => 1 6 => 2 ] 1 => array:7 [▼ 0 => 3 1 => 4 2 => 5 3 => 6 4 => 7 5 => 8 6 => 9 ] 2 => array:7 [▼ 0 => 10 1 => 11 2 => 12 3 => 13 4 => 14 5 => 15 6 => 16 ] 3 => array:7 [▼ 0 => 17 1 => 18 2 => 19 3 => 20 4 => 21 5 => 22 6 => 23 ] 4 => array:7 [▼ 0 => 24 1 => 25 2 => 26 3 => 27 4 => 28 5 => 29 6 => 30 ] 5 => array:7 [▼ 0 => 31 1 => "" 2 => "" 3 => "" 4 => "" 5 => "" 6 => "" ] ]
二维数组结果格式说明:
外层数组的键代表了第几周(0代表第一周,1代表第二周,2代表第三周….)
内层数组的键代表了周几(如:0代表周日,1代表周一,2代表周二, …., 6代表周六)