Laravel 5.4-时区配置



有没有办法更改Laravel的configapp.phptimezone的值,使其在我的计算机上的时间相同?

现在,它定在亚洲/马尼拉。

'timezone' => 'Asia/Manila',

您必须设置PHP支持的时区。有关可用时区的概述,请点击此处:http://php.net/manual/en/timezones.php

app/config/app.php中的时区设置为与您的时区相同,并且时间应与您的电脑中的时间相同。更改时区后,不要忘记php artisan config:cache.

对于瑞典,即您将时区设置为"Europe/Stockholm"

动态更改日期:

继续创建一个服务提供程序,或者使用AppServiceProvider,并在其中设置配置值。

//lets say you want to set timezone based on $timestamp
$timestamp = '2017-02-06 14:34:00';
$date = Carbon::createFromFormat('Y-m-d H:i:s', $timestamp, 'Europe/Stockholm');
$date->setTimezone('UTC');
Config::set('app.timezone', $date);

我处理它的方法是始终将所有内容存储在数据库中作为UTC。永远不要在服务器端更改此项。然后,当有人登录时,我使用momentjs和momentjs时区来猜测客户端时区是什么,并将其添加到登录页面上的隐藏字段中。它将时区存储在用户会话中。

然后你不修改你存储日期时间的方式,只修改它的显示方式。所以这就是我的很多刀片模板的样子:

{{ $model->created_at->timezone(Session::get('timezone'))->format('M j, Y g:ia') }}

这样,每次有人登录时,都应该根据他们的计算机当前设置显示时间

<input type="hidden" name="timezone" id="timezone" value="" />
<script>
document.getElementById('timezone').value = moment.tz.guess();
</script>

它适用于我的

  1. 使用moment-timezone.js获取客户端时区如果使用的是使用ajx的API调用,则设置头headers:{"X-TimeZone":moment.tz.guess((}

  2. 对于后端使用laravel中间件,在我的情况下,我使用了

app/Http/Middleware/Cors.php

public function handle($request, Closure $next)
{
if(!empty(request()->header('X-TimeZone'))){
date_default_timezone_set(request()->header('X-TimeZone'));
}
return $next($request)->header('Access-Control-Allow-Origin', '*')
->header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS')
->header('Access-Control-Allow-Headers',' Origin, Content-Type, Accept, Authorization, X-TimeZone, X-Request-With')
->header('Access-Control-Allow-Credentials',' true');
} 

无需任何花哨的设置,它将发挥魅力如果它对你有用,不要忘记竖起大拇指

最新更新