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 中指定的默认时区。
我将我的记录存储在 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 中指定的默认时区。