php获取N天后的日期,排除周末与节假日加上调休日
php获取N天后的日期,排除周末与节假日加上调休日
代码如下
.
/**
* 求取从某日起经过一定天数后的日期,
* 排除周六周日和节假日加上调休日
* @param $start int|string 开始日期
* @param $offset int 经过天数
* @param $exception string|array 节假日
* @param $allow string|array 调休日
* @return string
* examples:输入(2021-01-09,36,''),得到2021-03-09
*/
function getendday( $start='now', $offset=0, $exception='', $allow='' )
{date_default_timezone_set('prc');//先计算不排除周六周日及节假日的结果if (is_numeric($start)){$starttime = $start;}else{$starttime = strtotime($start);}$endtime = $starttime + $offset * 24 * 3600;$end = date('Y-m-d', $endtime);//然后计算周六周日引起的偏移$weekday = date('w', $starttime);//得到星期值:0-6if ($weekday == 0){//0是星期天$weekday = 7;}$remain = $offset % 7;$newoffset = 2 * ($offset - $remain) / 7;//每一周需重新计算两天if ($remain > 0) {//周余凑整$tmp = $weekday + $remain;if ($tmp >= 7) {$newoffset += 2;} else if ($tmp == 6) {$newoffset += 1;}//考虑当前为周六周日的情况if ($weekday == 6) {$newoffset -= 1;} else if ($weekday == 7) {$newoffset -= 2;}}//再计算节假日引起的偏移if (is_array($exception)) {//多个节假日foreach ($exception as $day) {$tmp_time = strtotime($day);if ($tmp_time > $starttime && $tmp_time <= $endtime) {//在范围(a,b]内$weekday_t = date('w', $tmp_time);if ($weekday_t <= 5 && $weekday_t != 0) {//防止节假日与周末重复$newoffset += 1;}}}}else {//单个节假日if (!empty($exception)) {$tmp_time = strtotime($exception);if ($tmp_time > $starttime && $tmp_time <= $endtime) {$weekday_t = date('w', $tmp_time);if ($weekday_t <= 5 && $weekday_t != 0) {$newoffset += 1;}}}}//再计算调休日引起的偏移if (is_array($allow)) {//多个调休日foreach ($allow as $day) {$tmp_time = strtotime($day);if ($tmp_time > $starttime && $tmp_time <= $endtime) {//在范围(a,b]内$weekday_t = date('w', $tmp_time);//得到星期值:0-6if ($weekday_t == 6 || $weekday_t == 0) {//若调休日是星期六、星期日$newoffset -= 1;}}}}else {//单个调休日if (!empty($allow)) {$tmp_time = strtotime($allow);if ($tmp_time > $starttime && $tmp_time <= $endtime) {$weekday_t = date('w', $tmp_time);if ($weekday_t == 6 || $weekday_t == 0) {//若调休日是星期六、星期日$newoffset -= 1;}}}}//根据偏移天数,递归做等价运算if($newoffset > 0){#echo "[{$start} -> {$offset}] = [{$end} -> {$newoffset}]"."<br />n";return getendday($end,$newoffset,$exception,$allow);}else{return $end;}
}
php获取N天后的日期,排除周末与节假日加上调休日相关推荐
- java获取n个工作日后的日期, 排除周末和节假日(顺延)
java获取n个工作日后的日期, 排除周末和节假日(顺延) 一.需求分析 需求描述 思路解析 二.以下为测试代码(测试时日期为2018-08-28) 三.应用 1.首先看一下我数据库中存放的holid ...
- js获取n天后的日期
1. 获取n天后的日期, n可为正数,可以为负数 /*** 计算n天后的日期* initDate:开始日期,默认为当天日期, 格式:yyyymmdd/yyyy-mm-dd* days:天数* flag ...
- Java Date类型格式化,不同日期格式转换,获取N天后的日期,CommonUtil工具
文章目录 Date类型格式化为各种格式字符串 不同日期格式的字符串之间的转换 获取N天后的日期 实用工具类库common-util使用 参考链接 Date类型格式化为各种格式字符串 java 日期格式 ...
- php判断是否节假日,php 排除周末与节假日程序实例代码
date_default_timezone_set('prc');/*** 求取从某日起经过一定天数后的日期,* 排除周六周日和节假日* @param $start 开始日期* @para ...
- java假期顺延求一个日期n天后的日期(排除节假日及周六周日)
1,引入hutool工具类jar <dependency><groupId>cn.hutool</groupId><artifactId>hutool- ...
- java获取7天后的日期_java 获取最近7天 最近今天的日期
private static Date getDateAdd(int days){ SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-d ...
- 节日代码php,php 排除周末与节假日程序实例代码
0 ){//周余凑整 $tmp = $weekday + $remain; if( $tmp >= 7 ){ $newoffset += 2; }else if( $tmp == 6 ){ $n ...
- access下半年月份是几月份_Access获取某年某月后的日期
有网友好奇想知道100天后的日期是什么年月日.因为这个日子对她来说是比较重要的. 可以用参数指定某个日期的年,月,日 其中每个年参数的取值范围为:从 100 到 9999 间的整数 只需要在今天的日期 ...
- php获取7天,php 获取未来七天的日期和星期
php获取未来七天的日期和星期代码 for($i=4;$i<8;$i++){ $dateArray[$i]=date('Y-m-d',strtotime(date('Y-m-d').'+'.$i ...
最新文章
- 【Smart_Point】C/C++ 中独占指针unique_ptr
- 思考:通过MMU/TLB/Cache对安全内存攻击的可能性
- 春运前五日全国累计发送旅客3.49亿人次 同比增0.58%
- SAP 电商云 Spartacus UI 回归测试 checkout-flow.core-e2e-spec.ts
- linux mysql 静态库_Linux静态库与动态库实例详解
- python接口编程_Python 中的面向接口编程
- java mybatis 搭建_mybatis环境搭建(转载)
- C语言实现成块数据读写操作 fread() fwrite()
- FastCGI 使用介绍
- 纯虚函数的一些问题和注意事项
- 软件工程毕设(六)·论文
- 实验01 使用网络协议分析仪Wireshark
- [ P1 ] 雷达相机标定基本知识
- 服务器硬盘坏道修复教程视频,硬盘坏道修复工具使用教程
- 按摩新方法(辅助药物治疗肝,肾,肺等慢性疾病)
- 最新Android框架排行榜。
- BootStrap富文本编辑器Summernote
- 购买重疾险是不是都要先去体检?千万不要!
- 【WPS表格】创建表格,汇总行
- 软硬结合——写给硬件开发工程师的全栈入门实战