У нас есть приложение в Laravel 5.2. В нашей базе данных publish_at хранит дату в timestamp с экземпляром carbon в UTC, так же как created_at и updated_at.Получить фильтрацию данных по местному часовому поясу от UTC
Каждый пост должен быть опубликован в полночь в каждом часовом поясе. Мы сохранили данные о датах в формате UTC, например
'published_at' => '2016-04-12 00:00:00'
Что мы хотим сделать, это как;
Если человек в США смотрит на него, он видит этот пост после полуночи. Если человек в Китае это видит, он видит этот пост после полуночи. Как мы можем достичь этого?
Это то, что мы делаем в данный момент. Но мы думаем, что это не сработает.
public function all($limit, array $data = [])
{
$posts = $this->post->with('categories')
->where(
'published_at', Carbon::now()->setTimezone($data['user_timezone'])
->format('Y-m-d 00:00:00')
)
->orderBy('published_at', 'ASC')
->paginate($limit);
}
Это первый раз, когда мы работаем во временных часах, и мы понятия не имеем. Любая помощь будет принята с благодарностью. Спасибо.
Дополнительная информация и документация: http://carbon.nesbot.com/docs/ –
Отлично. Это то, что мы ищем. Спасибо. Кроме того, когда мы пытаемся получить сегодняшнее сообщение, мы заменяем часть where() предложением whereBetween() как 'whereBetween ('published_at', array (Carbon :: now ($ data ['timezone']) -> format ('Ymd 00:00:00'), Carbon :: now ($ data ['timezone']) -> format ('Ymd H: i: s'))) '. Будет ли это работать? – IamGhale
@IamGhale вы можете сократить его до 'whereBetween ('published_at', [Carbon :: now ($ data ['timezone']), Carbon :: tomorrow ($ data ['timezone'])])' –