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


84

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

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

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


Что именно вы хотите сравнить? вы хотите знать, что старше / новее?
— lukasgeiter

да, я хочу жить в лагере старше / новее
— Хасан Сакиб

Ответы:


196

Во-первых, 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
}

2
Как я могу сравнивать только даты, а не время?
— geckob

3
@geckob Наверное, самое простое$date1->toDateString() == $date2->toDateString()
— lukasgeiter

Я тестирую, и можно использовать операторы сравнения для сравнения объектов Carbon. Это новая функция?
— JCarlosR

При использовании не забывайте обрабатывать временные метки, допускающие значение NULL. Laravel просто преобразует SQL nullв PHP nullвместо объекта Carbon, и вы получите call to a member function lt() on null.
— okdewit

вы должны использовать $ some_cabron_date-> endOfDay () или $ some_cabron_date-> startOfDay () с этими функциями для нужной операции
— Виллиан Лопес

21

В 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


3

Во-первых, преобразуйте метку времени с помощью встроенных красноречивых функций, как описано в этом ответе .

Тогда вы можете просто использовать функцию 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/


1

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.