php获取某个月内的每周的起始时间及各周的日期信息
/*获取每周数据*/ public function actionGetWeeks() { /*2022-05*/ $month = Yii::$app->request->getQueryParam('month'); $validate_model = DynamicModel::validateData(compact('month'), [ ['month', 'required'], ['month', 'string'], ]); if ($validate_model->hasErrors()) { throw new ApiException($validate_model->getFirstError('month')); } $weekInfo = array();//创建一个空数组 $endDate = date('d', strtotime($month . ' +1 month -1 day'));//计算当前月有多少天 for ($i = 1; $i < $endDate; $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])) { $newArr = array( date('Y-m-d', strtotime($lastWeek[1]) + 86400), date('Y-m-d', strtotime($lastWeek[1]) + (86400 * 7)) ); array_push($arr, $newArr); } $return = []; //数据插入 foreach ($arr as $k => $v) { $return[$k]['week'] = $k + 1;//第几周 $start_time = substr_replace(substr_replace($v[0], "", 0, 5), ".", 2, 1); $stop_time = substr_replace(substr_replace($v[1], "", 0, 5), ".", 2, 1); $return[$k]['week_str'] = $start_time . '-' . $stop_time; $return[$k]['start_time'] = strtotime($v[0]); $return[$k]['stop_time'] = mktime(23, 59, 59, date("m", strtotime($v[1])), date("d", strtotime($v[1])), date("Y", strtotime($v[1]))); $i = strtotime($v[0]); while ($i <= strtotime($v[1])) { $return[$k]['date'][] = date('Y-m-d', $i);//年月日 $i = $i + 86400; } } return $return; }
返回格式:
{ "week": 1, "week_str": "05.02-05.08", "start_time": 1651420800, "stop_time": 1652025599, "date": [ "2022-05-02", "2022-05-03", "2022-05-04", "2022-05-05", "2022-05-06", "2022-05-07", "2022-05-08" ] }, { "week": 2, "week_str": "05.09-05.15", "start_time": 1652025600, "stop_time": 1652630399, "date": [ "2022-05-09", "2022-05-10", "2022-05-11", "2022-05-12", "2022-05-13", "2022-05-14", "2022-05-15" ] }, { "week": 3, "week_str": "05.16-05.22", "start_time": 1652630400, "stop_time": 1653235199, "date": [ "2022-05-16", "2022-05-17", "2022-05-18", "2022-05-19", "2022-05-20", "2022-05-21", "2022-05-22" ] }, { "week": 4, "week_str": "05.23-05.29", "start_time": 1653235200, "stop_time": 1653839999, "date": [ "2022-05-23", "2022-05-24", "2022-05-25", "2022-05-26", "2022-05-27", "2022-05-28", "2022-05-29" ] }, { "week": 5, "week_str": "05.30-06.05", "start_time": 1653840000, "stop_time": 1654444799, "date": [ "2022-05-30", "2022-05-31", "2022-06-01", "2022-06-02", "2022-06-03", "2022-06-04", "2022-06-05" ] }