国产探花免费观看_亚洲丰满少妇自慰呻吟_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教程

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 洛浦县| 台中市| 遂川县| 丰顺县| 云南省| 沐川县| 赣榆县| 临清市| 广河县| 乌兰察布市| 渭源县| 荥阳市| 合水县| 绵阳市| 平凉市| 玉溪市| 黔南| 萨嘎县| 临高县| 汶上县| 丽江市| 徐汇区| 罗平县| 九寨沟县| 合作市| 昌江| 包头市| 都昌县| 汨罗市| 海宁市| 襄樊市| 陕西省| 图木舒克市| 竹溪县| 寿光市| 乐亭县| 星子县| 柳河县| 枣庄市| 开远市| 醴陵市|