Files
amb_wechatapp/application/admin/model/data/Time.php
T

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