【发布时间】:2017-09-21 05:44:03
【问题描述】:
我创建了一个中间件,以便根据数据库中设置的 auth 用户时区设置时区:
<?php
namespace App\Http\Middleware;
use Closure;
class TimezoneMiddleware
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if ($request->user()->guest()) {
$timezone = config('app.timezone');
}
else {
$timezone = $request->user()->timezone;
}
date_default_timezone_set($timezone);
return $next($request);
}
}
我将这个类添加到Kernel.php 中全局 HTTP 中间件声明的底部。
问题是它不起作用。显示created_at 字段时,无论我在数据库中设置什么用户时区,时间都保持不变。
【问题讨论】:
-
数据库中的所有日期和时间都以 UTC 格式存储。除非您进行某种转换,否则您将从数据库查询中得到返回。
-
我只想要从数据库中获取的任何
timestamp使用用户指定的时区。我试过中间件,服务提供商,没有任何效果。我迷路了。我正在使用数据表,所以我希望自动完成。 -
记住
date_default_timezone_set()只影响 PHP 日期和时间函数的作用!!! -
我的问题是关于如何在每次查询时自动使用 Eloquent 执行此操作。
标签: php laravel timezone middleware