PHP Carbon日期差异只有工作日
发布时间:2020-12-13 16:10:42 所属栏目:PHP教程 来源:网络整理
导读:我试图在人类格式的两个日期之间取得差异,但仅限于工作日.这是我的实际代码: $start = '2018-09-13 09:30:00';$end = '2018-10-16 16:30:00';$from = Carbon::parse($start);$to = Carbon::parse($end);$weekDay = $from-diffInWeekdays($to);$human = $to-
我试图在人类格式的两个日期之间取得差异,但仅限于工作日.这是我的实际代码:
$start = '2018-09-13 09:30:00'; $end = '2018-10-16 16:30:00'; $from = Carbon::parse($start); $to = Carbon::parse($end); $weekDay = $from->diffInWeekdays($to); $human = $to->diffForHumans($from,true,false,6); var_dump($weekDay); //24 var_dump($human); // 1 month 3 days 7 hours diffForHumans非常适合我的需求,但我找不到像diffInDaysFiltered那样的过滤方法 我想要达到的目的是得到这样的结果:24天7小时,因为我们只有24个工作日 我首先尝试使用preg_replace以$weekDay结果替换3天但是如果我们有一个月之前它是不正确的我有:1个月24天7小时 我的问题有什么解决方案吗? 解决方法
这是答案,感谢
imbrish
我需要使用级联因子来定义: >一天多少小时 然后使用diffFiltered,我只能选择工作日和工作时间.由于宏,您还可以在公共假期添加过滤器 CarbonInterval::setCascadeFactors(array( 'days' => array(10,'hours'),'weeks' => array(5,'days'),'months' => array(20,)); $resolution = CarbonInterval::hour(); $start = Carbon::parse('2017-07-13 11:00'); $end = Carbon::parse('2017-07-17 18:00'); $hours = $start->diffFiltered($resolution,function ($date) { return $date->isWeekday() && $date->hour >= 8 && $date->hour < 18; },$end); $interval = CarbonInterval::hours($hours)->cascade(); echo $interval->forHumans(); // 2 days 7 hours 这是macro部分: Carbon::macro('isHoliday',function ($self = null) { // compatibility chunk if (!isset($self) && isset($this)) { $self = $this; } // Put your array of holidays here return in_array($self->format('d/m'),[ '25/12',// Christmas '01/01',// New Year ]); }); 然后简单地添加&& !$date->在diffFiltered中的isHoliday() (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |