Blasanka
Blasanka

Reputation: 22477

How to add minutes to to a date in laravel

There are few ways that I can do this using PHP but I could not find a way to do that using laravel specific way.

I have a time that is coming from database in below format: Y:M:s

ex: 05:15:00

This is what I want to do:

add 30 minutes to that date, according to above example result should be: 05:45:00

Below is my current code and I want to add 30min to $endTime:

//get database value according to selected date
$allocatedDateQuery = DB::table('appointments')->where('date', $request->date)->get();

//loop throug every record to get time
foreach ($allocatedDateQuery as $value) {
    $time = $value->time;
    $endTime = $time;
}

Upvotes: 3

Views: 16024

Answers (3)

tam
tam

Reputation: 352

Since you said you are grabbing the date from the database I am assuming you are also using Eloquent to query from the database.

You can use Eloquent Mutator Method in your Database Modal Class to mutate the data like this:

    public function getAppointmentsAttribute($value) {
        return Date("Y:M:s", strtotime("30 minutes", strtotime($value->time)));
    }

You can even add another attribute without mutating the original value using Attribute assignments as well. This method caches your query and reduces database calls. Since you do not need to run local loops on the record your code is much cleaner.

Upvotes: 0

Blasanka
Blasanka

Reputation: 22477

I just got a perfect solution from here.

Use Carbon extention to simply acheive that.

What you have to do is parse your time to Carbon object and then you can use addMinutes() to do that and then you can format() if you want:

foreach ($allocatedDateQuery as $value) {
    $time = Carbon::parse($value->time);
    $endTime = $time->addMinutes(30);
    $allocateValidateMessage .= Carbon::parse($value->time)->format('H:i') . ' - ' . $endTime->format('H:i') . '  ';
}

Upvotes: 12

abr
abr

Reputation: 2129

Usually I use php's date, you can give this a try

Date("Y:M:s", strtotime("30 minutes", strtotime($value->time))

That is converting your time into a string, adding 30minutes to it and converting it to the date format of your desire

Upvotes: 1

Related Questions