Laravel 5 / Carbon:计算不同时区特定范围内的记录数

Laravel 5 / Carbon: Count number of records for specific range in a different timezone

我将我的记录存储在 EST 时区而不是 UTC,因为我几乎从不需要使用 UTC。最近虽然我需要在 UTC 中生成报告。

我计算了我网站上 "clicks" 的数量,这是我如何获取昨天的点击总数: Click::where('created_at', '>=', Carbon::now()->yesterday())->where('created_at', '<=', Carbon::now()->startOfDay())->count();

效果很好,但现在我需要获取 "yesterday in UTC" 的总点击次数 -- 是否有使用 eloquent / carbon 的简单方法?

假设您在数据库中的记录如您所述存储为 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();

请注意,carbon 是流利的 API,因此您可以将其简化为;

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

完全取决于您希望代码如何阅读。

顺便提一下 Carbon::now()Carbon::yesterday() 如果未提供,构建者将使用您 php.ini 中指定的默认时区。