69 lines
1.4 KiB
PHP
69 lines
1.4 KiB
PHP
<?php
|
|
namespace utils;
|
|
|
|
use think\facade\Db;
|
|
|
|
/**
|
|
* 获取工作日
|
|
*/
|
|
class WorkingDay
|
|
{
|
|
private $time = 0;
|
|
private $holidays = [];
|
|
public function __construct($time=0)
|
|
{
|
|
if (empty($time)) $this->time = time();
|
|
}
|
|
|
|
/**
|
|
* 获取当前年度的节假日
|
|
*/
|
|
private function getHolidays()
|
|
{
|
|
$data = Db::name('holiday')->where('year', '=', date('Y'))->column('data');
|
|
if (empty($data)) {
|
|
$this->holidays = [];
|
|
}
|
|
$this->holidays = $data;
|
|
}
|
|
|
|
/**
|
|
* 获取工作日
|
|
*/
|
|
public function getDates($adays)
|
|
{
|
|
// 获取节假日
|
|
$this->getHolidays();
|
|
|
|
// 组装工作日
|
|
$ctime = $this->time;
|
|
$days = [];
|
|
$i = 1;
|
|
while($adays>0) {
|
|
$day = strtotime("+ $i day", $ctime);
|
|
$week = date('w', $day);
|
|
// 剔除周六周日与假日
|
|
if (0 != $week && 6 != $week && !in_array(date('Y-m-d', $day), $this->holidays)) {
|
|
$adays-=1;
|
|
$days[] = date('Y-m-d H:i:s', $day);
|
|
}
|
|
$i+=1;
|
|
}
|
|
return $days;
|
|
}
|
|
|
|
/**
|
|
* 获取几个工作日后日期
|
|
*/
|
|
public function getDate($adays, $ctime = 0)
|
|
{
|
|
if (!empty($ctime)) {
|
|
$this->time = $ctime;
|
|
}
|
|
$days = $this->getDates($adays);
|
|
rsort($days);
|
|
return $days[0];
|
|
}
|
|
}
|
|
|