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


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.