Laravel 5/Carbon: подсчитайте количество записей для определенного диапазона в другом часовом поясе

Я храню свои записи в часовом поясе EST, а не в UTC, поскольку мне почти никогда не нужно использовать UTC. Недавно мне нужно было создать отчет в UTC.

Я подсчитываю количество «кликов» на своем сайте, вот как я подсчитываю количество вчерашних кликов: Click::where('created_at', '>=', Carbon::now()->yesterday())->where('created_at', '<=', Carbon::now()->startOfDay())->count();

Это прекрасно работает, но теперь мне нужно получить общее количество кликов для «вчера в UTC» — есть ли простой способ сделать это с помощью красноречия / углерода?


person Jay    schedule 13.07.2015    source источник


Ответы (1)


Предполагая, что ваши записи в вашей базе данных хранятся как EST, как вы упомянули, вам нужно будет сделать следующее.

// Get the start and end times you want in UTC
$start = Carbon::yesterday('UTC');
$end = Carbon::yesterday('UTC')->endOfDay();

// Convert those times to EST
$start->timezone('EST');
$end->timezone('EST');

// Now query the number of clicks, 'whereBetween' is a great little shortcut 
// for querying over a range
Click::whereBetween('created_at', [$start, $end])->count();

Обратите внимание, что углерод — это свободный API, поэтому вы можете упростить его до;

$start = Carbon::yesterday('UTC')->timezone('EST');
$end = Carbon::yesterday('UTC')->endOfDay()->timezone('EST');

Полностью зависит от того, как вы хотите, чтобы ваш код читался.

Кроме того, сборщики Carbon::now() и Carbon::yesterday() будут использовать часовой пояс по умолчанию, указанный в вашем php.ini, если он не указан.

person marcus.ramsden    schedule 13.07.2015
comment
Благодарю вас! И подсказка whereBetween тоже хороша! - person Jay; 14.07.2015