国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > PHP > 正文

ThinkPHP中如何獲取指定日期后工作日的具體日期

2020-03-22 19:21:49
字體:
來源:轉載
供稿:網友
本篇文章給大家帶來的內容是關于ThinkPHP中如何獲取指定日期后工作日的具體日期 (代碼詳解),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

思路:

1、獲取到查詢年份內所有工作日數據數組
2、獲取到查詢開始日期在工作日的索引
3、計算需查詢日期索引
4、獲得查詢日期

/*創建日期類型記錄表格*/CREATE TABLE `tb_workday` (`did` int(11) NOT NULL AUTO_INCREMENT,`exact_date` varchar(32) NOT NULL COMMENT 具體日期:格式date( Ymd (20170205) ,`date_year` varchar(32) NOT NULL COMMENT 具體日期:格式date( Y (2017) ,`date_type` tinyint(2) NOT NULL COMMENT 日期類型:0、工作日;1、特殊工作日;2、法定節假日 ,PRIMARY KEY (`did`)) ENGINE=InnoDB AUTO_INCREMENT=829 DEFAULT CHARSET=utf8 COMMENT= 各年工作日 法定節假日數據 
 ?phphtml' target='_blank'>class work_days * 獲取星期 * @param $date * @return mixed function get_week($date) //強制轉換日期格式 $date_str = date( Y-m-d , strtotime($date)); //封裝成數組 $arr = explode( - , $date_str); //參數賦值 $year = $arr[0]; //月,輸出2位整型,不夠2位右對齊 $month = sprintf( %02d , $arr[1]); //日,輸出2位整型,不夠2位右對齊 $day = sprintf( %02d , $arr[2]); //時分秒默認賦值為0; $hour = $minute = $second = 0; //轉換成時間戳 $strap = mktime($hour, $minute, $second, $month, $day, $year); //獲取數字型星期幾 $number_wk = date( w , $strap); //獲取數字對應的星期 return $number_wk; //自定義星期數組 //$weekArr = array( 星期日 , 星期一 , 星期二 , 星期三 , 星期四 , 星期五 , 星期六  //獲取數字對應的星期 //return $weekArr[$number_wk];
for ($i = 0; $i $days; $i++) { $_list_date[] = date( Y-m-d , $stimestamp + (86400 * $i)); return $_list_date; function curl_post($url, $data = null) $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); if (!empty($data)) { curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $output = curl_exec($curl); curl_close($curl); return $output; * 更新數據庫指定年份日期數據 * @param $year * @return int function updateDate($year) $startDate = date( Y-m-d , strtotime($year . -01-01 $endDate = date( Y-m-d , strtotime( +1 year , strtotime($startDate)) - 86400); $_list_date = self::getDateFromRange($startDate, $endDate); $url = http://api.goseek.cn/Tools/holiday //自行查找的免費API $m = M( tb_workday $count = 0; foreach ($_list_date as $k = $_date) { $_ret = 0; $_date = date( Ymd , strtotime($_date)); $_post_data = array( date = $_date); $_ret_curl = curl_post($url, $_post_data); $_ret_curl = json_decode($_ret_curl, true); //工作日 if ($_ret_curl[ data ] == 0) { $dateData[ exact_date ] = $_date; $dateData[ date_year ] = $year; $dateData[ date_type ] = 0; $_ret = $m- add($dateData) ? 1 : 0; unset($dateData);
* 獲取當年所有工作日 (從數據庫獲取,數據庫無數據則先更新數據) * @param string $year 當年年份 * @return array private function getWorkDays($year) $m = M( tb_workday $map[ date_year ] = $year; $map[ date_type ] = 0; $DateArray = $m- field( exact_date )- where($map)- select(); if (!empty($DateArray)) { $DateArray = array_column($DateArray, exact_date return $DateArray; } else { //更新數據庫工作日數據 $ret = self::updateDate($year); if ($ret 0) { return self::getWorkDays($year); } else { return false; * 獲取開始日期后第N個工作日具體日期 * @param $startdate string 計算開始日期 需包含年月日信息 * @param $days int 間隔天數 * @return mixed 成功返回 對應日期,失敗返回false public function getNextWorkDate($startdate, $days) $year = date( Y , strtotime($startdate)); $startdate = date( Y-m-d , strtotime($startdate)); $workDays = $this- getWorkDays($year); $search_key = array_search(date( Ymd , strtotime($startdate)), $workDays); if ($search_key === false) {//查詢日期為非工作 //獲取查詢日期前最近工作日 $m = M( tb_workday $map[ date_year ] = $year; $map[ date_type ] = 0; $map[ DATE_FORMAT(`exact_date`,/ %Y-%m-%d/ ) ] = array( LT , $startdate); $_search_date = $m- where($map)- order( `exact_date` DESC )- getField( exact_date $search_key = array_search($_search_date, $workDays); unset($m, $map, $_search_date); $t_key = $search_key + $days; if ($t_key = count($workDays) - 1) { return date( Y-m-d , strtotime($workDays[$t_key])); } else { //查詢日期已跨年 $n_days = $days - (count($workDays) - 1 - $search_key); $next_year = $year + 1; return $this- getNextWorkDate($next_year . -01-01 , $n_days - 1);
$_date_workday = $class- getNextWorkDate($startdate, $days);echo $_date_workday;//2018-10-10

以上就是ThinkPHP中如何獲取指定日期后工作日的具體日期 (代碼詳解)的詳細內容,PHP教程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 浪卡子县| 望奎县| 安陆市| 汝阳县| 那曲县| 蒲城县| 高雄县| 榆林市| 玛纳斯县| 仪陇县| 棋牌| 柳河县| 虎林市| 余干县| 抚州市| 武穴市| 马鞍山市| 清流县| 江北区| 黄石市| 西畴县| 云安县| 昭平县| 凤翔县| 延津县| 涞水县| 吉安市| 聂荣县| 江达县| 盐山县| 平遥县| 霍山县| 集安市| 贵南县| 彭阳县| 西峡县| 班玛县| 阿瓦提县| 利辛县| 南安市| 承德县|