P
Size: a a a
P
A
P
Д
Д
P
Д
P
P
Д
AH
<?phpЧерез offset сделано специально, так как на сервере в базе данных могут стоять кривые метки времени, которые не знают, что в России много лет как не переводят часы на летнее/зимнее время, а offset берёт параметры из свежего php, который это знает.
namespace App\Http\Middleware;
use Closure;
class Timezones
{
public function handle($request, Closure $next)
{
if ($request->hasHeader('X-Timezone')) {
$timezone = $request->header('X-Timezone');
$offset = static::timezoneOffsetString(timezone_offset_get(new \DateTimeZone($timezone), new \DateTime()));
date_default_timezone_set($timezone);
config(['app.timezone' => $timezone]);
\DB::statement('set time_zone="' . $offset . '"');
}
return $next($request);
}
public static function timezoneOffsetString($offset)
{
return sprintf("%s%02d:%02d", ($offset >= 0) ? '+' : '-', abs($offset / 3600), abs($offset % 3600));
}
}
AH
AH
X-Timezone
передать, например, Asia/Vladivostok
, то все даты и время будут отдаваться в UTC+10, а в базу будут конвертироваться в UTC+0.Д
AH
P
AH
NT
AH