Как сравнить две временные метки углерода?

У меня есть две метки времени: edited_at, которые я создал, и created_at (Laravel's) ... В базе данных оба имеют метку времени типа и значение по умолчанию 0000-00-00 00:00:00 ... Но

var_dump(edited_at variable) дает строку. Пока var_dump(created_at variable) - это объект / Carbon. Что не так с этими отметками времени?

Я должен сравнить оба после преобразования в целое число с использованием формата ('U'). Я могу вызвать этот метод только для Carbon Object. Как я могу это сделать?


person Hassan Saqib    schedule 16.04.2015    source источник
comment
Что именно вы хотите сравнить? вы хотите знать, что старше / новее?   -  person lukasgeiter    schedule 16.04.2015
comment
да, я хочу жить в лагере старше / новее   -  person Hassan Saqib    schedule 16.04.2015
comment
carbon.nesbot.com/docs/#api-comparison   -  person ceejayoz    schedule 15.07.2016


Ответы (4)


Во-первых, Eloquent автоматически конвертирует свои временные метки (created_at, updated_at) в углеродные объекты. Вы можете просто использовать updated_at, чтобы получить эту замечательную функцию, или указать edited_at в своей модели в свойстве $dates:

protected $dates = ['edited_at'];

А теперь вернемся к вашему актуальному вопросу. В Carbon есть несколько функций сравнения:

  • eq() равно
  • ne() не равно
  • gt() больше чем
  • gte() больше или равно
  • lt() меньше чем
  • lte() меньше или равно

Использование:

if($model->edited_at->gt($model->created_at)){
    // edited at is newer than created at
}
person lukasgeiter    schedule 16.04.2015
comment
Как я могу сравнивать только даты, а не время? - person geckob; 17.05.2016
comment
@geckob Наверное, проще всего сделать $date1->toDateString() == $date2->toDateString() - person lukasgeiter; 17.05.2016
comment
Я тестирую, и можно использовать операторы сравнения для сравнения объектов Carbon. Это новая функция? - person JCarlosR; 07.02.2017
comment
При использовании не забывайте обрабатывать временные метки, допускающие значение NULL. Laravel просто преобразует SQL null в PHP null вместо объекта Carbon, и вы получите call to a member function lt() on null. - person okdewit; 26.04.2017
comment
вы должны использовать $ some_cabron_date- ›endOfDay () или $ some_cabron_date-› startOfDay () с этими функциями для нужной операции - person Williaan Lopes; 13.11.2019
comment
@lukasgeiter или $date->isSameAs(now()) - person Aslam; 09.06.2021

В Carbon есть несколько функций сравнения с мнемоническими именами:

  • равно()
  • notEqualTo ()
  • больше чем()
  • больше или равно()
  • меньше, чем()
  • меньше или равно()

Использование:

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

Действительно для nesbot / carbon 1.36.2

если вы не уверены, какая у вас версия Carbon, запустите эту

$composer show "nesbot/carbon"

документация: https://carbon.nesbot.com/docs/#api-comparison

person Yevgeniy Afanasyev    schedule 26.03.2019

Сначала преобразуйте метку времени, используя встроенную функцию красноречия, как описано в этом ответе.

Тогда вы можете просто использовать функцию Carbon min() или max() для сравнения. Например:

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

Это будет echo меньшая из двух дат, которая в данном случае равна $dt1.

См. http://carbon.nesbot.com/docs/.

person ginna    schedule 14.07.2016

Вот как я сравниваю 2 даты, сейчас () и дату из таблицы.

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

Должно работать в самый раз. Я использовал функции сравнения, предоставляемые Carbon.

person hackernewbie    schedule 23.08.2020