format('Y-m-d 00:00:00'); $dayEnd = $dt->format('Y-m-d 23:59:59'); $dayList[$dt->format('Y-m-d')] = ['start' => strtotime($dayStart), 'end' => strtotime($dayEnd)]; // 递增日期 $dt->add(new \DateInterval('P1D')); // 增加一天 } return $dayList; } /** * 获取指定日期的一个月内 * 每一天的开始与结束时间 * @param $date * @return array * @throws \Exception */ public function getMonthDaysStartAndEnd($date) { $start = new \DateTime($date); $end = clone $start; $end->modify('+1 month'); // 移动到一个月后 // 初始化结果数组 $dayList = []; while ($start < $end) { $dayStart = $start->format('Y-m-d 00:00:00'); $dayEnd = $start->format('Y-m-d 23:59:59'); $dayList[$start->format('Y-m-d')] = ['start' => strtotime($dayStart), 'end' => strtotime($dayEnd)]; // 递增日期 $start->add(new \DateInterval('P1D')); // 增加一天 } return $dayList; } /** * 获取指定日期的一个季度内 * 每一天的开始与结束时间 * @param $date * @return array * @throws \Exception */ public function getQuarterDaysStartAndEnd($date) { $start = new \DateTime($date); $end = clone $start; $end->modify('+3 month'); // 移动到一个月后 // 初始化结果数组 $dayList = []; while ($start < $end) { $dayStart = $start->format('Y-m-d 00:00:00'); $dayEnd = $start->format('Y-m-d 23:59:59'); $dayList[$start->format('Y-m-d')] = ['start' => strtotime($dayStart), 'end' => strtotime($dayEnd)]; // 递增日期 $start->add(new \DateInterval('P1D')); // 增加一天 } return $dayList; } /** * 获取指定日期的一年内 * 每一天的开始与结束时间 * @param $date * @return array * @throws \Exception */ public function getYearDaysStartAndEnd($date) { $start = new \DateTime($date); $end = clone $start; $end->modify('+1 years'); // 移动到一个月后 // 初始化结果数组 $dayList = []; while ($start < $end) { $dayStart = $start->format('Y-m-d 00:00:00'); $dayEnd = $start->format('Y-m-d 23:59:59'); $dayList[$start->format('Y-m-d')] = ['start' => strtotime($dayStart), 'end' => strtotime($dayEnd)]; // 递增日期 $start->add(new \DateInterval('P1D')); // 增加一天 } return $dayList; } /** * 获取指定日期范围内 * 每一天的开始与结束时间 * @param $startDate * @param $endDate * @return array * @throws \Exception */ function getDateRangeStartAndEnd($startDate, $endDate) { $start = new \DateTime($startDate); $end = new \DateTime($endDate); $end->modify('+1 day'); // 包含结束日期那天 // 初始化结果数组 $dayList = []; while ($start < $end) { $dayStart = $start->format('Y-m-d 00:00:00'); $dayEnd = $start->format('Y-m-d 23:59:59'); $dayList[$start->format('Y-m-d')] = ['start' => strtotime($dayStart), 'end' => strtotime($dayEnd)]; // 递增日期 $start->add(new \DateInterval('P1D')); // 增加一天 } return $dayList; } /** * 获取指定日期的开始与结束时间 * @return array */ public function getFilterStartEndTime($time,$unit){ switch ($unit){ case 'date': $startTime = strtotime($time.' midnight'); $endTime = strtotime($time . " 23:59:59"); break; case 'week': $startTime = strtotime($time.' midnight'); $endTime = strtotime($time."+7 day 23:59:59"); break; case 'month': $startTime = strtotime($time.'-01 00:00:00'); $endTime = strtotime($time." next month") - 1; break; case 'quarter': $year = date('Y', strtotime($time)); $month = date('m', strtotime($time)); $quarter = ceil($month / 3); $startMonth = ($quarter - 1) * 3 + 1; $endMonth = $startMonth + 2; $startOfQuarter = "$year-$startMonth-01 00:00:00"; $endOfQuarter = date('Y-m-t 23:59:59', strtotime("$year-$endMonth-01")); $startTime = strtotime($startOfQuarter); $endTime = strtotime($endOfQuarter); break; case 'year': $year = date('Y', strtotime($time)); $startTime = strtotime("$year-01-01 00:00:00"); $endTime = strtotime("$year-12-31 23:59:59"); break; case 'range': $startTime = strtotime($time[0] . " 00:00:00"); $endTime = strtotime($time[1] . " 23:59:59"); break; } return ['start'=>$startTime,'end'=>$endTime]; } }