【问题标题】:How to make Carbon subWeekdays() remove holidays in addition to removing weekends除了删除周末之外,如何使 Carbon subWeekdays() 删除假期
【发布时间】:2017-09-05 15:04:37
【问题描述】:

我如何能够修改 Carbon 中的 subWeekdays() 方法来考虑假期?例如:

Carbon::now()->subWeekdays(10)->toDateString();

倒退十天,不包括周末。我希望能够执行以下操作

Carbon::now()->subWeekdays(10, true)->toDateString();

通过传递true 的第二个参数,它将指示 Carbon 现在只忽略周末,但也忽略节假日。

知道如何将代码添加到 Carbon 以使其工作吗?

或者也许向 Carbon 库添加一个方法,我可以在其中执行类似以下操作并获得相同的结果:

Carbon::now()->subWeekdays(10)->subHolidays()->toDateString();

谢谢

【问题讨论】:

  • 你如何定义假期?
  • 好问题:我想我没有考虑到这一点。可能是这样的数组:$holidays = ['2017-09-04', '2017-11-23'];,然后将允许类似 Carbon::now()->subWeekdays(10, $holidays, true)->toDateString(); 或类似 Carbon::now()->subWeekdays(10)->subHolidays($holidays)->toDateString(); 的东西

标签: php datetime php-carbon


【解决方案1】:

如果您有兴趣,我想我已经找到了使用 https://packagist.org/packages/rovangju/carbon-nbd 的方法

use Carbon\Carbon;
use CarbonExt\NBD\Calculator;

$calc = new Calculator();
$calc->addExclusion(new Carbon('2017-09-04'));

var_dump(Carbon::now()->subWeekdays(10)->toDateString());  // '2017-08-22'
var_dump($calc->nbd(Carbon::now()->subWeekdays(10))->toDateString());  // '2017-08-23'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多