Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用碳计算周末持续时间(小时)?_Php_Laravel_Datetime_Php Carbon - Fatal编程技术网

Php 如何使用碳计算周末持续时间(小时)?

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

我知道碳有周末相关的功能,但这在我的情况下似乎不起作用

我想找到以小时/分钟为单位的周末持续时间

例如,周末从周五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 = 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点。