Laravel Carbon вычитает дни из текущей даты

Я пытаюсь извлечь объекты из модели «Пользователи», чья created_at дата прошла более 30 дней с сегодняшнего дня.

Carbon :: now () ==> Я хочу как ==> Carbon :: now () - 30 дней

$users = Users::where('status_id', 'active')
               ->where( 'created_at', '<', Carbon::now())
               ->get();

Как этого добиться?


person zeetit    schedule 13.12.2016    source источник


Ответы (3)


Используйте метод subDays():

$users = Users::where('status_id', 'active')
           ->where( 'created_at', '>', Carbon::now()->subDays(30))
           ->get();
person Alexey Mezenin    schedule 13.12.2016
comment
Вы уверены, что хотите изменить «‹ »на« ›», чтобы пользователи были созданы более 30 дней назад? - person Chris Forrence; 13.12.2016
comment
мое условие заключается в том, что текущая дата больше 30 дней с текущей даты. Думаю, эта логика решает задачу за меня - person zeetit; 13.12.2016
comment
Рад, что помог. ) @ChrisForrence да, если бы я использовал <, он вернул бы всех пользователей, созданных до точки now minus 30 days. - person Alexey Mezenin; 13.12.2016
comment
@AlexeyMezenin Это то, что ищет первоначальный спрашивающий; если взять в качестве примера сегодняшний день (13 декабря), более 30 дней с сегодняшнего дня будут созданы до 13 ноября. - person Chris Forrence; 13.12.2016
comment
Я предполагаю, что его more означает later здесь. Также Carbon::now() ==> I want as ==> Carbon::now() - 30days в значительной степени объясняет, чего хочет OP. - person Alexey Mezenin; 13.12.2016
comment
Ааа, да ... извините, я не понял. Да, позже я имел в виду - person zeetit; 13.12.2016
comment
subDays (30) правильно, но я думаю, что он должен быть ‹для того, чтобы пользователи были созданы более 30 дней назад. В любом случае проголосовал за ответ из-за правильного метода. - person GeoffCodesThings; 18.12.2016
comment
Ответ не нужно менять, потому что subDays () вычитает дни. Например, сегодня 24 ноября 2019 года, а subDays (30) вернет дату 24 октября 2019 года. Таким образом, если сравнение ‹(меньше, чем), результатом будут все записи до 24 октября 2019 г., но то, что OP хочет позже от этой даты, и хочет только 30-дневные записи < / b>. Ответ идеальный! - person Optimizr; 24.11.2019
comment
Помните, что вам следует сбросить H M S также на 00:00:00, иначе вы собираетесь получить разницу во времени по полям Timestamp / Date Time. поэтому добавьте ->endOfDay() или ->hour(0)->minute(0)->second(0) или в настройках даты date('Y-m-d 00:00:00') - person tristanbailey; 29.01.2021

Вы всегда можете использовать strtotime, чтобы вычесть количество дней с текущей даты:

$users = Users::where('status_id', 'active')
           ->where( 'created_at', '>', date('Y-m-d', strtotime("-30 days"))
           ->get();
person Chris Kelker    schedule 09.10.2018
comment
может сделать это date('Y-m-d 00:00:00', strtotime("-30 days") более аккуратным - person tristanbailey; 29.01.2021

Начиная с Laravel 5.6 вы можете использовать whereDate:

$users = Users::where('status_id', 'active')
       ->whereDate( 'created_at', '>', now()->subDays(30))
       ->get();

У вас также есть whereMonth / whereDay / whereYear / whereTime

person Joskfg    schedule 21.01.2021