182 lines
5.7 KiB
PHP
182 lines
5.7 KiB
PHP
<?php
|
|
|
|
namespace app\admin\model\data;
|
|
|
|
use think\Model;
|
|
|
|
|
|
class Time
|
|
{
|
|
|
|
/**
|
|
* 获取指定日期的指定天数内
|
|
* 每一天的开始与结束时间
|
|
* @param $date
|
|
* @return array
|
|
* @throws \Exception
|
|
*/
|
|
public function getDaysStartAndEnd($date, $days = 7) {
|
|
$dt = new \DateTime($date);
|
|
// 初始化结果数组
|
|
$dayList = [];
|
|
for ($i = 0; $i < $days; $i++) {
|
|
// 格式化开始和结束时间
|
|
$dayStart = $dt->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];
|
|
}
|
|
} |