<?php
/**
* @author: hirry
* @email: ljhynlp@126.com
* @time: 2013-06-05
* @words: 获取从今天开始退回的第n个工作日的日期
*/

//定义当前时间
define("TODAY",date("Y-m-d"));
//定义要获取第几个工作日的日期
define("NUMDAY",'5');

//计算出第5天的时间
$fifthday = get_num_date(TODAY, NUMDAY);
//获取第5个工作日
echo "第5个工作日期是:";
echo get_fifth_work_date(TODAY, $fifthday);

//计算第n天的日期
function get_num_date($startDate, $numDate){
 return date("Y-m-d", strtotime($startDate) + $numDate*3600*24);
}

//计算第5个工作日期
function get_fifth_work_date($toDay, $endday){
 $num = check_work_day_num($toDay, $endday);
 if($num==5){
  echo $endday;
 }else{
  $endday2 = get_num_date(TODAY, NUMDAY+(NUMDAY-$num));
  get_fifth_work_date($toDay, $endday2);
 }
}

//计算工作日函数
function check_work_day_num($toDay, $endday){
 $starttime = $toDay;
 $endtime = $endday;

$starttime=date("z",mktime(0,0,0,substr($starttime,5,2),substr($starttime,8,2),substr($starttime,0,4))); $endtime=date("z",mktime(0,0,0,substr($endtime,5,2),substr($endtime,8,2),substr($endtime,0,4)));
 $alltime=$endtime-$starttime+1;

//节假日的日期数据,目前按照年份配置就可以了
 $ordainrest["2013"] = "05-01&3|&&|06-10&3|&&|10-01&5";
 $ordainrest["2014"] = "05-01&3|&&|06-10&3|&&|10-01&5";

//计算去掉节假日的天数
 $tmpa=explode("|&&|",$ordainrest[date("Y")]);
 for($Tmpb=0;$Tmpb<count($tmpa);$Tmpb++){
  $tmpc=explode("&",$tmpa[$Tmpb]);
  $tmpsize=date("z",mktime(0,0,0,substr($tmpc[0],0,2),substr($tmpc[0],3,2),date("Y")));
  if($tmpsize>=$starttime && $tmpsize<=$endtime){
   $alltime=$alltime-$tmpc[1];
   //从总的工作日中去掉法定日期
  }
 }
 
 //计算去掉周末的天数
 $weekdaynum = get_weekend_days($toDay, $endday);
 $work_day_num = $alltime-($weekdaynum-1);
 return $work_day_num;
}

//获取周末天数
function get_weekend_days($start_date,$end_date,$is_workday = false){
 if (strtotime($start_date) > strtotime($end_date)) list($start_date, $end_date) = array($end_date, $start_date);
  $start_reduce = $end_add = 0;
  $start_N = date('N',strtotime($start_date));
  $start_reduce = ($start_N == 7) ? 1 : 0;
  $end_N = date('N',strtotime($end_date));
  in_array($end_N,array(6,7)) & $end_add = ($end_N == 7) ? 2 : 1;
  $alldays = abs(strtotime($end_date) - strtotime($start_date))/86400 + 1;
  $weekend_days = floor(($alldays + $start_N - 1 - $end_N) / 7) * 2 - $start_reduce + $end_add;
  if ($is_workday){
   $workday_days = $alldays - $weekend_days;
   return $workday_days;
  }
 return $weekend_days;
}

php-获取从今天开始计算第5个工作日的日期相关推荐

  1. uni-app获取当前位置并计算出某个地点距离

    实现思路:先通过 uni.getLocation 接口获取当前位置获取当前位置,再与点击经纬度进行计算得出相差距离. 1.获取当前位置 需要先在manifest.json配置文件开启获取位置权限 // ...

  2. java获取时间并进行计算

    前言 SimpleDateFormat使用介绍 提示:以下是本篇文章正文内容,下面案例可供参考 一.SimpleDateFormat是什么? 如果你对java源码比较了解.你会发现java对文字,数字 ...

  3. java 和 mysql 获取周 星期 的第一天 最后一天 或者 月的 日期(字符串转日期,日期转字符串,日期加减)...

    获取周的第一天,最后一天 System.out.println(getStartEndDate("2016-05-01", 1)); 获取星期的第一天和最后一天 System.ou ...

  4. java计算当前日期后N个工作日的日期

    如图,合同中有很多这种日期计算,故封装一通用工具类,记录于此.需求如下: WorkDayUtils如下: package com.sqds.utils;import org.apache.common ...

  5. Java计算时间区间内工作日天数

    Java计算时间区间内工作日天数,并去除放假日与周末重叠数据 实际生活中,国家法定假日可能与周六周日重叠,所以需要去重.对于放假补班的特殊情况,需要另外补充 实际生活中,国家法定假日可能与周六周日重叠 ...

  6. PHP获取当前时间、时间戳的各种格式写法汇总[日期时间]

    PHP获取当前时间.时间戳的各种格式写法汇总[日期时间] 原文:PHP获取当前时间.时间戳的各种格式写法汇总[日期时间] 今天写下php中,如何通过各种方法 获取当前系统时间.时间戳,并备注各种格式的 ...

  7. php 计算时间段内的工作日 与节假日

    计算方法是取开始时间后的第一个星期一,如果结束时间大于等这一天则用第一个星期一至结束时间的时间的间隔取整周数与余数计算工作日与周末,再加上第一个周一前一周的工作日与节假日. /** 计算时间段内的工作 ...

  8. js日期计算,根据当前日期计算n个月后的日期

    js计算n个月后的日期,并匹配月底,处理闰年,闰月 工作中遇到日期计算的需求,需要根据给定的日期计算出n个月后的日期,开始感觉挺简单一需求,因为现成的moment.js就有日期加月份计算的功能,但需求 ...

  9. oracle获取当前时间顺延指定工作日的日期

    1.创建节假日表,包含周六日 create table EA_DEADLINE_HOLIDAY_CONFIG (   id            NUMBER(19) not null,   desc ...

最新文章

  1. 如何删除exchange2007默认证书
  2. JavaScript学习笔记(8)——JavaScript语法之运算符
  3. px word 表格宽度_word怎样批量修改表格的宽度(2)
  4. POJ2154(Pólya定理与欧拉函数优化)
  5. python3(十一)内置模块和类型转换
  6. java用户名检查数据库_登入界面账号密码是访问数据库,但登入问题时if判断时就是执行不了...
  7. 移动端1px线适配问题-------适配各种编译CSS工具 stylus sass styled-componet实现方法...
  8. ubantu 添加防火墙策略_Ubuntu防火墙安装和配置
  9. H-JTAG烧写程序的方法
  10. 【Word】无分页符却出现异常分页情况
  11. 【知识图谱】实践篇——基于知识图谱的《红楼梦》人物关系可视化及问答系统实践:part3前端搭建与可视化
  12. iOS开发——扫二维码下载APP
  13. CSS——微信朋友圈图片样式实现方法
  14. 「目前全网唯一2万字长文」从JS上下文到Chromium源码的极限拉扯!!兄弟姐妹们接好了!!...
  15. Excel2016 怎么做数据分类汇总
  16. [codeforces1139C]Edgy Trees
  17. 咸鱼软件应用—ubuntu切换中文
  18. 深度学习CV文章整理
  19. Unity 播放声音
  20. android gettext方法,android – EditText不返回getText()上的内容

热门文章

  1. Android存储之MediaStore的使用
  2. 【Celery】Celery的简易部署和应用
  3. Unity判断手势的滑动方向,单点触摸和多点触摸,并获取刚触摸以及触摸结束事的坐标
  4. 键指如飞--Mac电脑快捷键学习
  5. 【AE表达式】300多个人名正从宇宙中飞来……
  6. java 导出excel换行_java WriteExcelFile生成excel如何让在一个单元格内换行?
  7. Java核心知识:面向对象-多态
  8. Java编程思想之对象入门
  9. 关于研究鼠标绘制平滑曲线的阶段总结
  10. LDO和BUCK降压稳压器对比