从日期中添加或减去天数时如何避免周末或节假日[重复]
Posted
技术标签:
【中文标题】从日期中添加或减去天数时如何避免周末或节假日[重复]【英文标题】:How to avoid weekends or holidays when adding or subtracting days from a date [duplicate] 【发布时间】:2013-12-19 10:27:03 【问题描述】:我在许多格式中看到过这个问题,包括 C/C+ 和 javascript。我也以相反的形式看到了这个问题...How to calculate a span between dates excluding weekends or holidays。但是,假设您已经有一个特定的日期。例如,2014-01-04
我想计算一个日期 ($diff
) 之前三个工作日,不包括任何周末或节假日。三天的直接减法将导致2014-01-01
,所以我们知道这行不通。所以,我再减去一天,得到2013-12-31
- 再次,不好。另一个尝试给了我们2013-12-30
。最后,我们在两个日期之间有三个实际工作日!但是,我们只是说就像 2014 年一样,2013-12-30
是在周日......好吧,我想你明白我的意思了。
我到底怎么才能得到我想要的结果?
【问题讨论】:
【参考方案1】:好吧,我已经编写了一个漂亮的 php 函数来解决这个难题,并希望与我的程序员同事分享它,并接受对其构成的建设性批评。
function onlyWorkDays( $d )
$holidays = array('2013-12-25','2013-12-31','2014-01-01','2014-01-20','2014-02-17','2014-05-26','2014-07-04','2014-09-01','2014-10-13','2014-11-11','2014-11-27','2014-12-25','2014-12-31');
while (in_array($d->format("Y-m-d"), $holidays)) // HOLIDAYS
$d->sub(new DateInterval("P1D"));
if ($d->format("w") == 6) // SATURDAY
$d->sub(new DateInterval("P1D"));
if ($d->format("w") == 0) // SUNDAY
$d->sub(new DateInterval("P2D"));
return $d;
【讨论】:
周末检查也必须在while循环中。使用“2015-12-27”测试您的功能,您将在 12 月 25 日星期五结束。以上是关于从日期中添加或减去天数时如何避免周末或节假日[重复]的主要内容,如果未能解决你的问题,请参考以下文章