$month = "2022-05";
$weekinfo = array();//创建一个空数组
$end_date = date('d', strtotime($month . ' +1 month -1 day'));//计算当前月有多少天
for ($i = 1; $i < $end_date; $i = $i + 7) { //循环本月有多少周
$w = date('N', strtotime($month . '-' . $i)); //计算第一天是周几
$weekinfo[] = array(
date('Y-m-d', strtotime($month . '-' . $i . ' -' . ($w - 1) . ' days')),
date('Y-m-d', strtotime($month . '-' . $i . ' +' . (7 - $w) . ' days'))
);
}
$arr = [];
foreach ($weekinfo as $k => $v) {
//连接上个月的数据去掉
if (date("m", strtotime($v[0])) == date("m", strtotime($month))) {
$arr[] = $v;
}
}
//月份的最后一天
$lastday = date('Y-m-d', mktime(23, 59, 59, date('m', strtotime($month)) + 1, 00));
$lastweek = end($arr);
//不够下个月的数据补上
if (strtotime($lastday) > strtotime($lastweek[1])) {
$newendarr = array(
date('Y-m-d', strtotime($lastweek[1]) + 86400),
date('Y-m-d', strtotime($lastweek[1]) + (86400 * 7))
);
array_push($arr, $newendarr);
}
$datas = [];
//数据插入
foreach ($arr as $ke => $va) {
$data['week'] = $ke + 1; //第几周
$data['year'] = date('Y', strtotime($month)); //年
$data['month'] = date('m', strtotime($month));//月
//每个星期的开始-结束数据填充
$i = strtotime($va[0]);
while ($i <= strtotime($va[1])) {
$data['date'] = date('Y-m-d', $i); //年月日
$days = date("w", $i);
$data['day'] = ($days == 0) ? '7' : $days;//星期几
$datas[] = $data;
$i = $i + 86400;
}
}
return $datas;