Як порівняти дві карбонові позначки часу?


85

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

var_dump(edited_at variable)дає рядок. While var_dump(created_at variable)є object / Carbon. Що не так із цими позначками часу?

Я повинен порівняти обидва після перетворення в ціле число за допомогою формату ('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
Як я можу порівняти лише дати, а не час?
геккон

3
@geckob Найлегше, мабуть, зробити$date1->toDateString() == $date2->toDateString()
lukasgeiter

Я тестую, і можна використовувати оператори порівняння для порівняння об'єктів Carbon. Це нова функція?
JCarlosR

Використовуючи це, пам’ятайте, що потрібно обробляти мітки часу, що допускають обнулення. 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 ()
  • більше, ніж, величніше ніж, крутіший за()
  • largerThanOrEqualTo ()
  • менше, ніж ()
  • lessThanOrEqualTo ()

Використання:

 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 дати, зараз () і дату з таблиці

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

Має працювати в самий раз. Я використовував функції порівняння, надані Carbon.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.