首页 / PHP / PHP Carbon日期差异只有工作日
PHP Carbon日期差异只有工作日
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了PHP Carbon日期差异只有工作日,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1603字,纯文字阅读大概需要3分钟。
内容图文
我试图在人类格式的两个日期之间取得差异,但仅限于工作日.这是我的实际代码:
$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, 'days'),
));
$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()
内容总结
以上是互联网集市为您收集整理的PHP Carbon日期差异只有工作日全部内容,希望文章能够帮你解决PHP Carbon日期差异只有工作日所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。