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"
]
}
浙公网安备 33010602011771号