- /******************************** 计算当前日期N个工作日后的时间 ****************************************/
- /***************************************** 方法一 ****************************************/
- //需要手动维护配置文件或者放入db中
- $holiday=[
- '2018-04-29','2018-04-30',
- '2018-05-01','2018-05-05','2018-05-06','2018-05-12','2018-05-13','2018-05-19','2018-05-20','2018-05-26','2018-05-27',
- '2018-06-02','2018-06-03','2018-06-09','2018-06-10','2018-06-16','2018-06-17','2018-06-18','2018-06-23','2018-06-24','2018-06-30',
- '2018-07-01','2018-07-07','2018-07-08','2018-07-14','2018-07-15','2018-07-21','2018-07-22','2018-07-28','2018-07-29',
- '2018-08-04','2018-08-05','2018-08-11','2018-08-12','2018-08-18','2018-08-19','2018-08-25','2018-08-25',
- '2018-09-01','2018-09-02','2018-09-08','2018-09-09','2018-09-15','2018-09-16','2018-09-22','2018-09-23','2018-09-24','2018-09-29','2018-09-30',
- '2018-10-01','2018-10-02','2018-10-03','2018-10-04','2018-10-05','2018-10-06','2018-10-07','2018-10-13','2018-10-14','2018-10-20','2018-10-21','2018-10-27','2018-10-28',
- '2018-11-03','2018-11-04','2018-11-10','2018-11-11','2018-11-17','2018-11-18','2018-11-24','2018-11-25',
- '2018-12-01','2018-12-02','2018-12-08','2018-12-09','2018-12-15','2018-12-16','2018-12-22','2018-12-23','2018-12-29','2018-12-30',
- ];
- date_default_timezone_set('PRC');
- function afterWorkDay($start_timestamp='',$add_workday_num='',$holiday=[]){
- //实际工作时间数组
- $workday=array();
- $i=0;
- //判断实际工作时间数组的长度
- while(count($workday)<intval($add_workday_num)){
- $i++;
- $onewdate=date('Y-m-d',($start_timestamp)+$i*(60*60*24));
- //非节假日添加实际工作时间数组
- if(!in_array($onewdate,$holiday)){
- $workday[]=$onewdate;
- }
- }
- return array('day'=>date('Y-m-d',($start_timestamp)+$i*(60*60*24)),'workday'=>$workday);
- }
- $start_timestamp=time();
- //计算两个工作日后的时间
- var_dump(afterWorkDay($start_timestamp,2,$holiday));//out put 2017-06-05 13:30:56
- /******************************** 方法二 *******************************************/
- //curl方法比file_get_contents效率要快30%左右,稳定性也更强
- function get_travel_day($data){
- $num=6;
- $a=0;
- for($i=1;$i<=$num+365;$i++){
- @$b=strtotime($data)+86400*$i;
- @$date=date("Ymd",$b);
- @$dates=date("Y年m月d日",$b);
- $url="http://api.goseek.cn/Tools/holiday?date=".$date;
- $is_day=json_decode(file_get_contents($url),true);
- if($is_day["data"]==0){
- $a++;
- }
- if($a==$num){
- return $dates;
- //$this->assign('travel_day',$dates);
- break;
- }
- }
- }
- //curl方法比file_get_contents效率要快30%左右,稳定性也更强
- function get_travel_day($data){
- $num=6;
- $a=0;
- for($i=1;$i<=$num+365;$i++){
- @$b=strtotime($data)+86400*$i;
- @$date=date("Ymd",$b);
- $url="http://api.goseek.cn/Tools/holiday?date=".$date;
- $ch = curl_init();
- curl_setopt($ch, CURLOPT_URL, $url);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
- $response = curl_exec($ch);
- curl_close($ch);
- $is_day=json_decode($response,true);
- if($is_day["data"]==0){
- $a++;
- }
- if($a==$num){
- return @date("Y年m月d日",$b);
- break;
- }
- }
- }
- echo get_travel_day('20180427');
- /**************************************** 方法三 **************************************/
- //一个每年更新一次的接口 判断当天是不是休息日(周六日与法定节假日)
- function get_travel_day($data){
- #计算N个工作日后的日期
- $num=6;
- $a=0;
- for($i=1;$i<=$num+365;$i++){
- @$b=strtotime($data)+86400*$i;
- @$date=date("Ymd",$b);
- $url="http://api.goseek.cn/Tools/holiday?date=".$date;
- $ch = curl_init();
- curl_setopt($ch, CURLOPT_URL, $url);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
- $response = curl_exec($ch);
- curl_close($ch);
- $is_day=json_decode($response,true);
- if($is_day["data"]==0){
- $a++;
- }
- if($a==$num){
- return @date("Y年m月d日",$b);
- break;
- }
- }
- }
计算当前日期N个工作日后的时间
最新推荐文章于 2023-05-26 15:12:32 发布