计算当前日期N个工作日后的时间


  1. /********************************   计算当前日期N个工作日后的时间  ****************************************/
  2. /*****************************************   方法一  ****************************************/
  3. //需要手动维护配置文件或者放入db中
  4.  $holiday=[
  5. '2018-04-29','2018-04-30',
  6. '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',
  7. '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',
  8. '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',
  9. '2018-08-04','2018-08-05','2018-08-11','2018-08-12','2018-08-18','2018-08-19','2018-08-25','2018-08-25',
  10. '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',
  11. '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',
  12. '2018-11-03','2018-11-04','2018-11-10','2018-11-11','2018-11-17','2018-11-18','2018-11-24','2018-11-25',
  13. '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',
  14. ];
  15. date_default_timezone_set('PRC'); 
  16. function afterWorkDay($start_timestamp='',$add_workday_num='',$holiday=[]){
  17.     //实际工作时间数组
  18.     $workday=array();
  19.     $i=0;
  20.     //判断实际工作时间数组的长度
  21.     while(count($workday)<intval($add_workday_num)){
  22.         $i++;
  23.         $onewdate=date('Y-m-d',($start_timestamp)+$i*(60*60*24));
  24.         //非节假日添加实际工作时间数组
  25.         if(!in_array($onewdate,$holiday)){
  26.             $workday[]=$onewdate;
  27.         }
  28.     }
  29.     return array('day'=>date('Y-m-d',($start_timestamp)+$i*(60*60*24)),'workday'=>$workday);
  30. }
  31. $start_timestamp=time();
  32. //计算两个工作日后的时间
  33. var_dump(afterWorkDay($start_timestamp,2,$holiday));//out put 2017-06-05 13:30:56
  34. /********************************   方法二  *******************************************/
  35. //curl方法比file_get_contents效率要快30%左右,稳定性也更强
  36. function get_travel_day($data){
  37.     $num=6;
  38.     $a=0;
  39.     for($i=1;$i<=$num+365;$i++){
  40.         @$b=strtotime($data)+86400*$i;
  41.         @$date=date("Ymd",$b);
  42.         @$dates=date("Y年m月d日",$b);
  43.         $url="http://api.goseek.cn/Tools/holiday?date=".$date;
  44.         $is_day=json_decode(file_get_contents($url),true);
  45.         if($is_day["data"]==0){
  46.             $a++;
  47.         }
  48.         if($a==$num){
  49.         return $dates;
  50.             //$this->assign('travel_day',$dates);
  51.             break;
  52.         }
  53.     }
  54. }

  55. //curl方法比file_get_contents效率要快30%左右,稳定性也更强
  56. function get_travel_day($data){
  57.     $num=6;
  58.     $a=0;
  59.     for($i=1;$i<=$num+365;$i++){
  60.         @$b=strtotime($data)+86400*$i;
  61.         @$date=date("Ymd",$b);
  62.         $url="http://api.goseek.cn/Tools/holiday?date=".$date;
  63. $ch = curl_init();
  64. curl_setopt($ch, CURLOPT_URL, $url);
  65. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  66. $response = curl_exec($ch); 
  67. curl_close($ch);
  68.         $is_day=json_decode($response,true);
  69.         if($is_day["data"]==0){
  70.             $a++;
  71.         }
  72.         if($a==$num){
  73.             return @date("Y年m月d日",$b);
  74.             break;
  75.         }
  76.     }
  77. }

  78. echo get_travel_day('20180427');
  79. /****************************************   方法三  **************************************/
  80. //一个每年更新一次的接口   判断当天是不是休息日(周六日与法定节假日)
  81. function get_travel_day($data){
  82.     #计算N个工作日后的日期
  83.     $num=6;
  84.     $a=0;
  85.     for($i=1;$i<=$num+365;$i++){
  86.         @$b=strtotime($data)+86400*$i;
  87.         @$date=date("Ymd",$b);
  88.         $url="http://api.goseek.cn/Tools/holiday?date=".$date;
  89.         $ch = curl_init();
  90.         curl_setopt($ch, CURLOPT_URL, $url);
  91.         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  92.         $response = curl_exec($ch); 
  93.         curl_close($ch);
  94.         $is_day=json_decode($response,true);
  95.         if($is_day["data"]==0){
  96.             $a++;
  97.         }
  98.         if($a==$num){
  99.             return @date("Y年m月d日",$b);
  100.             break;
  101.         }
  102.     }
  103. }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值