#mysql #laravel #timezone #utc #timezone-offset
#mysql #laravel #Часовой пояс #utc #смещение часового пояса
Вопрос:
У меня есть проект Laravel с базой данных MySQL, установленной на часовой пояс UTC. Я хочу иметь возможность изменять время часового пояса UTC в БД на разные часовые пояса в зависимости от того, где находится клиент, получающий доступ к данным.
Я могу установить timezone
параметр в config/app.php
динамически на основе клиента, но это, похоже, не влияет на время, поступающее в БД, когда я использую save
метод в методе Laravel (в основном, все возвращается к UTC).
Вероятно, есть несколько способов реализовать это, но после долгих поисков я не могу найти способ заставить время DB в UTC переключиться на выбранный мной часовой пояс.
Стоит отметить, что мой проект иногда использует модели Laravel для запросов, а иногда использует конструктор запросов из DB
класса. Я не уверен, нужно ли обрабатывать их по-разному, но все равно я ищу решение, которое обрабатывает оба варианта использования. Спасибо.
Ответ №1:
https://laravel.com/api/5.1/Illuminate/Console/Scheduling/Event.html#method_timezone
$data->setTimezone(Auth::user()->timezone)
Комментарии:
1. Спасибо за твой ответ, Чарльз, но в итоге я пошел другим путем (в основном потому, что понял, что неправильно понял проблему, когда задавал вопрос). Спасибо.
Ответ №2:
Чарльз, я ценю твой ответ, но в итоге я понял, что даты вводятся в базу данных правильно, но когда я сравнивал их с функцией MySQL NOW()
, NOW()
часть была тем, что мне нужно было преобразовать.
Таким образом, я закончил тем, что использовал CONVERT_TZ
функцию следующим образом, чтобы получить то, что я хотел:
CONVERT_TZ(NOW(), 'UTC', 'US/Eastern')
Третий параметр был сделан переменным, но вы поняли суть. Кроме того, это похоже на взлом, но пока это работает.