Php 如何使用碳计算周末持续时间(小时)?
我知道碳有周末相关的功能,但这在我的情况下似乎不起作用 我想找到以小时/分钟为单位的周末持续时间 例如,周末从周五12:00后开始,到周日22:30结束 输入应如下所示:Php 如何使用碳计算周末持续时间(小时)?,php,laravel,datetime,php-carbon,Php,Laravel,Datetime,Php Carbon,我知道碳有周末相关的功能,但这在我的情况下似乎不起作用 我想找到以小时/分钟为单位的周末持续时间 例如,周末从周五12:00后开始,到周日22:30结束 输入应如下所示: $start_date_time = new Carbon('2018-03-01 11:53:20'); $end_date_time = new Carbon('2018-03-03 21:53:20'); 以分钟计算周末持续时间的最佳方法是什么 这更好地解释了这一点 $start_date_time
$start_date_time = new Carbon('2018-03-01 11:53:20');
$end_date_time = new Carbon('2018-03-03 21:53:20');
以分钟计算周末持续时间的最佳方法是什么
这更好地解释了这一点
$start_date_time = new Carbon('2018-03-01 11:53:20');
$end_date_time = new Carbon('2018-03-03 21:53:20');
$total_duration = $start_date_time->diffInMinutes($end_date_time);
$week_end_hours = //This is some thing I have to work out.
/*
My calculations is based on 'Asia/Kolkata' time zone
For the given inputs
2018-03-01 is Thursday // This is a weekday and no calculations required
2018-03-02 is Friday //This is a weekend. So the duration needs to be calculated after 12:00
2018-03-03 is Saturday //This is a weekend. So we need to calculate the duration till 21:53:20
The result should be 2033 Minutes or 33 hours
*/
$week_day_hours = $total_duration - $week_end_hours;
了解周五和周日的日期:
$weekend_start_date_time = new Carbon('2018-03-02 12:00:00');
$weekend_end_date_time = new Carbon('2018-03-04 22:30:00');
$start_date_time = new Carbon('2018-03-01 11:53:20');
$end_date_time = new Carbon('2018-03-05 12:00:00');
if($start_date_time>$weekend_start_date_time&&$end_date_time<$weekend_end_date_time){
$weekend_time = $total;
}elseif($start_date_time<$weekend_start_date_time&&$end_date_time<$weekend_end_date_time){
$pre_weekend = $weekend_start_date_time->diffInSeconds($start_date_time);
$weekend_time = $total-$pre_weekend;
}elseif($start_date_time>$weekend_start_date_time&&$end_date_time>$weekend_end_date_time){
$post_weekend = $end_date_time->diffInSeconds($weekend_end_date_time);
$weekend_time = $total-$post_weekend;
}else{
$weekend_time = $weekend_end_date_time->diffInSeconds($weekend_start_date_time);
}
echo floor($weekend_time / 3600).gmdate("/i", $weekend_time % 3600);
$weekend\u start\u date\u time=新碳('2018-03-02 12:00:00');
$weekend_end_date_time=新碳('2018-03-04 22:30:00');
$start_date_time=新碳('2018-03-01 11:53:20');
$end_date_time=新碳('2018-03-05 12:00:00');
如果($start\u date\u time>$weekend\u start\u date\u time&$end\u date\u time$weekend\u end\u date\u time){
$post\u weekend=$end\u date\u time->diffinsionds($weekend\u end\u date\u time);
$weekend\u time=$total-$post\u weekend;
}否则{
$weekend\u time=$weekend\u end\u date\u time->diffinsonds($weekend\u start\u date\u time);
}
回音地板($weekend\u time/3600).gmdate(“/i”,$weekend\u time%3600);
知道周五和周日的日期:
$weekend_start_date_time = new Carbon('2018-03-02 12:00:00');
$weekend_end_date_time = new Carbon('2018-03-04 22:30:00');
$start_date_time = new Carbon('2018-03-01 11:53:20');
$end_date_time = new Carbon('2018-03-05 12:00:00');
if($start_date_time>$weekend_start_date_time&&$end_date_time<$weekend_end_date_time){
$weekend_time = $total;
}elseif($start_date_time<$weekend_start_date_time&&$end_date_time<$weekend_end_date_time){
$pre_weekend = $weekend_start_date_time->diffInSeconds($start_date_time);
$weekend_time = $total-$pre_weekend;
}elseif($start_date_time>$weekend_start_date_time&&$end_date_time>$weekend_end_date_time){
$post_weekend = $end_date_time->diffInSeconds($weekend_end_date_time);
$weekend_time = $total-$post_weekend;
}else{
$weekend_time = $weekend_end_date_time->diffInSeconds($weekend_start_date_time);
}
echo floor($weekend_time / 3600).gmdate("/i", $weekend_time % 3600);
$weekend\u start\u date\u time=新碳('2018-03-02 12:00:00');
$weekend_end_date_time=新碳('2018-03-04 22:30:00');
$start_date_time=新碳('2018-03-01 11:53:20');
$end_date_time=新碳('2018-03-05 12:00:00');
如果($start\u date\u time>$weekend\u start\u date\u time&$end\u date\u time$weekend\u end\u date\u time){
$post\u weekend=$end\u date\u time->diffinsionds($weekend\u end\u date\u time);
$weekend\u time=$total-$post\u weekend;
}否则{
$weekend\u time=$weekend\u end\u date\u time->diffinsonds($weekend\u start\u date\u time);
}
回音地板($weekend\u time/3600).gmdate(“/i”,$weekend\u time%3600);
基于@Iosu的if-else逻辑
您也可以在发布日期中创建周末。这是代码示例
$start_date_time = new Carbon('2018-03-01 11:53:20');
$end_date_time = new Carbon('2018-03-05 12:00:00');
Carbon::setTestNow($start_date_time);// set the mock
$thisFriday = new Carbon('this friday');
$weekend_start_date_time = $thisFriday->setTime(12,00,00);
$thisSaturday = new Carbon('this saturday');
$weekend_end_date_time = $thisSaturday->setTime(22,30,00);
$total = 0;
if($start_date_time>$weekend_start_date_time&&$end_date_time<$weekend_end_date_time){
$weekend_time = $total;
}elseif($start_date_time<$weekend_start_date_time&&$end_date_time<$weekend_end_date_time){
$pre_weekend = $weekend_start_date_time->diffInSeconds($start_date_time);
$weekend_time = $total-$pre_weekend;
}elseif($start_date_time>$weekend_start_date_time&&$end_date_time>$weekend_end_date_time){
$post_weekend = $end_date_time->diffInSeconds($weekend_end_date_time);
$weekend_time = $total-$post_weekend;
}else{
$weekend_time = $weekend_end_date_time->diffInSeconds($weekend_start_date_time);
}
echo floor($weekend_time / 3600).gmdate("/i", $weekend_time % 3600);
Carbon::setTestNow();
$start_date_time=新碳('2018-03-01 11:53:20');
$end_date_time=新碳('2018-03-05 12:00:00');
碳::setTestNow($start_date_time);//开玩笑
$thisFriday=新碳(“本周五”);
$weekend\u start\u date\u time=$thisFriday->setTime(12,00,00);
$thisSaturday=新碳排放(“本周六”);
$weekend\u end\u date\u time=$thisSaturday->setTime(22,30,00);
$total=0;
如果($start\u date\u time>$weekend\u start\u date\u time&$end\u date\u time$weekend\u end\u date\u time){
$post\u weekend=$end\u date\u time->diffinsionds($weekend\u end\u date\u time);
$weekend\u time=$total-$post\u weekend;
}否则{
$weekend\u time=$weekend\u end\u date\u time->diffinsonds($weekend\u start\u date\u time);
}
回音地板($weekend\u time/3600).gmdate(“/i”,$weekend\u time%3600);
碳::setTestNow();
试试看
注:如果是逻辑部分,则未测试 基于@Iosu的if-else逻辑 您也可以在发布日期中创建周末。这是代码示例
$start_date_time = new Carbon('2018-03-01 11:53:20');
$end_date_time = new Carbon('2018-03-05 12:00:00');
Carbon::setTestNow($start_date_time);// set the mock
$thisFriday = new Carbon('this friday');
$weekend_start_date_time = $thisFriday->setTime(12,00,00);
$thisSaturday = new Carbon('this saturday');
$weekend_end_date_time = $thisSaturday->setTime(22,30,00);
$total = 0;
if($start_date_time>$weekend_start_date_time&&$end_date_time<$weekend_end_date_time){
$weekend_time = $total;
}elseif($start_date_time<$weekend_start_date_time&&$end_date_time<$weekend_end_date_time){
$pre_weekend = $weekend_start_date_time->diffInSeconds($start_date_time);
$weekend_time = $total-$pre_weekend;
}elseif($start_date_time>$weekend_start_date_time&&$end_date_time>$weekend_end_date_time){
$post_weekend = $end_date_time->diffInSeconds($weekend_end_date_time);
$weekend_time = $total-$post_weekend;
}else{
$weekend_time = $weekend_end_date_time->diffInSeconds($weekend_start_date_time);
}
echo floor($weekend_time / 3600).gmdate("/i", $weekend_time % 3600);
Carbon::setTestNow();
$start_date_time=新碳('2018-03-01 11:53:20');
$end_date_time=新碳('2018-03-05 12:00:00');
碳::setTestNow($start_date_time);//开玩笑
$thisFriday=新碳(“本周五”);
$weekend\u start\u date\u time=$thisFriday->setTime(12,00,00);
$thisSaturday=新碳排放(“本周六”);
$weekend\u end\u date\u time=$thisSaturday->setTime(22,30,00);
$total=0;
如果($start\u date\u time>$weekend\u start\u date\u time&$end\u date\u time$weekend\u end\u date\u time){
$post\u weekend=$end\u date\u time->diffinsionds($weekend\u end\u date\u time);
$weekend\u time=$total-$post\u weekend;
}否则{
$weekend\u time=$weekend\u end\u date\u time->diffinsonds($weekend\u start\u date\u time);
}
回音地板($weekend\u time/3600).gmdate(“/i”,$weekend\u time%3600);
碳::setTestNow();
试试看
注:如果是逻辑部分,则未测试 您是否愿意发布一个示例:带有结果的示例输入?更新了问题。请检查一下,我很困惑。这与周末无关,真的。您似乎只是在寻找两个DateTime对象之间的差异,这在碳元素中是绝对微不足道的<代码>$startDateTime->diffInHours($endDateTime)Carbon已设置周末([Carbon::FRIDAY,Carbon::SATURDAY]),但时间是从周五上午12:00到周六晚上11:59。您是否愿意发布示例:示例输入和结果?更新了问题。请检查一下,我很困惑。这与周末无关,真的。您似乎只是在寻找两个DateTime对象之间的差异,这在碳元素中是绝对微不足道的<代码>$startDateTime->diffInHours($endDateTime)Carbon已经设置了周末([Carbon::FRIDAY,Carbon::SATURDAY]),但它是从周五上午12:00到周六晚上11:59。这是我一直在寻找的东西。它在周末前工作。如果还有周末后的日子呢。让结束日期定在周一下午12点。这是我一直在寻找的东西。它在周末前工作。如果还有周末后的日子呢。截止日期为周一下午12点。