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"
			]
		}

  

posted on 2022-09-12 13:42  xuxxnb  阅读(15)  评论(0编辑  收藏  举报

导航