如何使用Carbon查找周末持续时间?

时间:2018-02-27 20:42:42

标签: php laravel datetime php-carbon

我知道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 = 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;

2 个答案:

答案 0 :(得分:1)

了解周五和周日日期:

$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);

答案 1 :(得分:1)

基于@ Iosu的if-else逻辑,

您也可以在发布日期创建周末。这是代码示例。

public $enableCsrfValidation = false;

试一试!

注意:未测试if-else逻辑部分。

相关问题