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

首頁 > 開發 > PHP > 正文

php 排除周末與節假日程序實例代碼

2024-05-04 21:58:31
字體:
來源:轉載
供稿:網友
  1. date_default_timezone_set('prc'); 
  2. /** 
  3. * 求取從某日起經過一定天數后的日期, 
  4. * 排除周六周日和節假日 
  5. * @param $start       開始日期 
  6. * @param $offset      經過天數 
  7. * @param $exception 例外的節假日 
  8. * @param $allow       允許的日期(預留參數) 
  9. * @return//開源代碼Vevb.com 
  10. *  examples:輸入(2010-06-25,5,''),得到2010-07-02 
  11. */ 
  12. function getendday( $start='now'$offset=0, $exception=''$allow='' ){ 
  13.     //先計算不排除周六周日及節假日的結果 
  14.     $starttime = strtotime($start); 
  15.     $endtime = $starttime + $offset * 24 * 3600; 
  16.     $end = date('y-m-d'$endtime); 
  17.     //然后計算周六周日引起的偏移 
  18.     $weekday = date('n'$starttime);//得到星期值:1-7 
  19.     $remain = $offset % 7; 
  20.     $newoffset = 2 * ($offset - $remain) / 7;//每一周需重新計算兩天 
  21.     if$remain > 0 ){//周余湊整 
  22.         $tmp = $weekday + $remain
  23.         if$tmp >= 7 ){ 
  24.             $newoffset += 2; 
  25.         }else if$tmp == 6 ){ 
  26.             $newoffset += 1; 
  27.         } 
  28.         //考慮當前為周六周日的情況 
  29.         if$weekday == 6 ){ 
  30.             $newoffset -= 1; 
  31.         }else if$weekday == 7 ){ 
  32.             $newoffset -= 2; 
  33.         } 
  34.     } 
  35.     //再計算節假日引起的偏移 
  36.     ifis_array($exception) ){//多個節假日 
  37.         foreach ($exception as $day){ 
  38.             $tmp_time = strtotime($day); 
  39.             if$tmp_time>$starttime && $tmp_time<=$endtime ){//在范圍(a,b]內 
  40.                 $weekday_t = date('n'$tmp_time); 
  41.                 if($weekday_t <= 5){//防止節假日與周末重復 
  42.                     $newoffset += 1; 
  43.                 } 
  44.             } 
  45.         } 
  46.     }else{//單個節假日 
  47.         if$exception!='' ){ 
  48.             $tmp_time = strtotime($exception); 
  49.             if$tmp_time>$starttime && $tmp_time<=$endtime ){ 
  50.                 $weekday_t = date('n'$tmp_time); 
  51.                 if($weekday_t <= 5){ 
  52.                     $newoffset += 1; 
  53.                 } 
  54.             } 
  55.         } 
  56.          
  57.     } 
  58.     //根據偏移天數,遞歸做等價運算111cn.net 
  59.     if($newoffset > 0){ 
  60.         #echo "[{$start} -> {$offset}] = [{$end} -> {$newoffset}]"."<br /> "
  61.         return getendday($end,$newoffset,$exception,$allow); 
  62.     }else
  63.         return $end
  64.     } 
  65. /** 
  66. * 暴力循環方法 
  67. */ 
  68. function getendday2( $start='now'$offset=0, $exception=''$allow='' ){ 
  69.     $starttime = strtotime($start); 
  70.     $tmptime = $starttime + 24*3600; 
  71.      
  72.     while$offset > 0 ){ 
  73.         $weekday = date('n'$tmptime); 
  74.         $tmpday = date('y-m-d'$tmptime); 
  75.         $bfd = false;//是否節假日 
  76.         if(is_array($exception)){ 
  77.             $bfd = in_array($tmpday,$exception); 
  78.         }else
  79.             $bfd = ($exception==$tmpday); 
  80.         } 
  81.         if$weekday<=5 && !$bfd){//不是周末和節假日 
  82.             $offset--; 
  83.             #echo "tmpday={$tmpday}"."<br />"
  84.         } 
  85.         $tmptime += 24*3600; 
  86.     } 
  87.      
  88.     return $tmpday
  89. $exception = array
  90.     '2010-01-01','2010-01-02','2010-01-03'
  91.     '2010-04-03','2010-04-04','2010-04-05'
  92.     '2010-05-01','2010-05-02','2010-05-03'
  93.     '2010-06-14','2010-06-15','2010-06-16'
  94.     '2010-09-22','2010-09-23','2010-09-24'
  95.     '2010-10-01','2010-10-02','2010-10-03','2010-10-04'
  96.     '2010-10-05','2010-10-06','2010-10-07'
  97.      
  98. ); 
  99. //echo getendday('2010-08-27',3,''); 
  100. //echo getendday('2010-06-25',15,'2010-07-07'); 
  101. $t1 = microtime(); 
  102. echo getendday('2010-05-12',66,$exception)."<br />"
  103. $t2 = microtime();echo "use ".($t2-$t1)." s <br />"
  104. echo getendday2('2010-05-12',66,$exception)."<br />"
  105. $t3 = microtime();echo "use ".($t3-$t2)." s <br />"

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 大厂| 九江县| 衡山县| 武鸣县| 普格县| 荥阳市| 崇文区| 元谋县| 长治县| 衡阳县| 龙胜| 烟台市| 大名县| 东城区| 寿阳县| 二连浩特市| 新昌县| 峡江县| 五莲县| 涟源市| 沧源| 安多县| 黄冈市| 漳平市| 山东| 凤凰县| 玉屏| 仁化县| 北宁市| 孝昌县| 晋宁县| 武隆县| 专栏| 获嘉县| 保康县| 镶黄旗| 乌审旗| 白城市| 江口县| 甘南县| 福海县|