Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

mahbubrn's avatar

how to get 'over', 'running', 'upcoming' status between two date using carbon

I am trying to make a method by two date which return me a string like 'over' or 'running' or 'upcoming' status. I also try this by manual code but its return me sometimes wrong answer.


/**
 * Formatting date as system date
*/
function fixdate($date = null)
{
    if($date)
    {
        $date = date_create($date);
        $date = date_format($date, "Y-m-d");

        return $date;
    }

    return null;
}


/**
 *  Get date status. (over / on going / upcoming)
 *
*/

function date_status($date1, $date2 = null)
{
    // validity checking
    if(empty($date1)){return null;}

    $date1 = fixdate($date1);
    if($date2){
        $date2 = fixdate($date2);
    }

    // $date1, $date2 = from, to
    $today = new DateTime();
    $today = $today->format('Y-m-d');

    // same as date('Y-m-d');

    if($date1 === $today) {
        $date1 = 'ongoing';
    }
    elseif($date1 > $today) {
        $date1 = 'upcoming';
    }
    else {
        $date1 = 'over';
    }

    if(empty($date2)) {
        return $date1;
    }
    else{
        if($date2 === $today) {
            $date2 = 'ongoing';
        }
        elseif($date2 > $today) {
            $date2 = 'upcoming';
        }
        else {
            $date2 = 'over';
        }

        // return calculation
        // return - ongoing
        if($date1 == 'ongoing' && $date2 == 'upcoming') {
            return 'ongoing';
        }
        elseif($date1 == 'over' && $date2 == 'ongoing') {
            return 'ongoing';
        }
        elseif($date1 == 'over' && $date2 == 'upcoming') {
            return 'ongoing';
        }
        elseif($date1 == 'ongoing' && $date2 == 'ongoing') {
            return 'ongoing';
        }

        // return - upcoming
        elseif($date1 == 'upcoming' && $date2 == 'upcoming') {
            return 'upcoming';
        }

        // return - over
        elseif($date1 == 'over' && $date2 == 'over') {
            return 'over';
        }
    }
}

So i need an easy way by laravel carbon which is return me like 'over', 'upcoming', 'running' etc status.

thanks.

0 likes
3 replies
Snapey's avatar
Snapey
Best Answer
Level 122

Note that both dates are inclusive. The thing is still ongoing on end date

use Illuminate\Support\Carbon;

public function date_status(string $start, string $end): string
{
    $start = Carbon::parse($start);
    $end = Carbon::parse($end);


    if(today()->lt($start)) {
        return 'upcoming';
    }

    if(today()->gt($end)) {
        return 'over';
    }

    return 'ongoing';

}
mahbubrn's avatar

@Snapey Can you please tell me about "->lt()" or "->gt()" method? Or any link where I can know about it.

Please or to participate in this conversation.