从日期添加或减去天数时如何避免周末或假日

时间:2013-12-19 10:27:03

标签: php sql date

我以多种格式看过这个问题,包括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 个答案:

答案 0 :(得分:-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;
}