2013-12-19 42 views
-1

我以多种格式(包括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; 
} 
+0

周末检查也必须在while循环中。用'2015-12-27'测试你的功能,你将在12月25日星期五结束。 –

相关问题