How to compare two Carbon Timestamps?

LaravelLaravel 5Php Carbon

Laravel Problem Overview


I have two timestamps, edited_at which I created and created_at (Laravel's)... In database, both have type timestamp and default value 0000-00-00 00:00:00... But

var_dump(edited_at variable) is giving string. While var_dump(created_at variable) is object/Carbon. What is wrong with these timestamps?

I have to compare both after converting into integer using format('U'). I can only call this method on Carbon Object. How can I do that?

Laravel Solutions


Solution 1 - Laravel

First, Eloquent automatically converts it's timestamps (created_at, updated_at) into carbon objects. You could just use updated_at to get that nice feature, or specify edited_at in your model in the $dates property:

protected $dates = ['edited_at'];

Now back to your actual question. Carbon has a bunch of comparison functions:

  • eq() equals
  • ne() not equals
  • gt() greater than
  • gte() greater than or equals
  • lt() less than
  • lte() less than or equals

Usage:

if($model->edited_at->gt($model->created_at)){
    // edited at is newer than created at
}

Solution 2 - Laravel

Carbon has a bunch of comparison functions with mnemonic names:

  • equalTo()
  • notEqualTo()
  • greaterThan()
  • greaterThanOrEqualTo()
  • lessThan()
  • lessThanOrEqualTo()

Usage:

 if($model->edited_at->greaterThan($model->created_at)){
     // edited at is newer than created at
 }

>Valid for nesbot/carbon 1.36.2

if you are not sure what Carbon version you are on, run this

$composer show "nesbot/carbon"

documentation: https://carbon.nesbot.com/docs/#api-comparison

Solution 3 - Laravel

First, convert the timestamp using the built-in eloquent functionality, as described [in this answer][1].

Then you can just use Carbon's min() or max() function for comparison. For example:

$dt2 = Carbon::create(2014, 1, 30, 0, 0, 0);
echo $dt1->min($dt2);   ```

This will `echo` the lesser of the two dates, which in this case is `$dt1`.

See http://carbon.nesbot.com/docs/

  [1]: https://stackoverflow.com/a/29684354/3904384

Solution 4 - Laravel

This is how I am comparing 2 dates, now() and a date from the table

@if (\Carbon\Carbon::now()->lte($item->client->event_date_from))
    .....
    .....
@endif

Should work just right. I have used the comparison functions provided by Carbon.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionHassan SaqibView Question on Stackoverflow
Solution 1 - LaravellukasgeiterView Answer on Stackoverflow
Solution 2 - LaravelYevgeniy AfanasyevView Answer on Stackoverflow
Solution 3 - LaravelginnaView Answer on Stackoverflow
Solution 4 - LaravelhackernewbieView Answer on Stackoverflow