如何在主配置中更新当前时区?
How can update Current Timezone in the main configuration?
config/app.php
'timezone' => 'America/New_York',
我正在尝试根据 clientTimeZone Asia/Kolkata
更新我的 app.timezone
$date = new DateTime();
$timeZone = $date->getTimezone();
echo $timeZone->getName().PHP_EOL;
$timezone_offset_minutes = 330;
$clientTimeZone = timezone_name_from_abbr("", $timezone_offset_minutes*60, false);
echo $clientTimeZone .PHP_EOL;
Session::put('clientTimeZone',$clientTimeZone);
config('app.timezone', $clientTimeZone);
$date = new DateTime();
$timeZone = $date->getTimezone();
echo $timeZone->getName() .PHP_EOL;
这是结果
America/New_York
Asia/Kolkata
America/New_York
我有种感觉
config('app.timezone', $clientTimeZone);
没有生效
DateTime class 接受两个参数,第二个是 ?DateTimeZone $timezone = null
。如果省略或为空,将使用当前时区。
$timezone = new DateTimeZone('America/New_York');
$date = new DateTime('now', $timezone);
Laravel 的 app.timezone
配置不直接影响 DateTime。
在 bootstrapping Laravel 应用程序上,它以这种方式设置时区
date_default_timezone_set($config->get('app.timezone', 'UTC'));
要使用客户端时区,您可以在会话期间全局设置它
$timezone_offset_minutes = 330;
$clientTimeZone = timezone_name_from_abbr("", $timezone_offset_minutes*60, false);
date_default_timezone_set($clientTimeZone);
请记住它不会影响任何其他应用程序,即 mysql。 Mysql 仍将使用 app.timezone
在申请 bootstrap 上阅读。
我建议将客户端时区传递给任何方法、函数并以这种方式使用它
$timezone_offset_minutes = 330;
$clientTimeZone = timezone_name_from_abbr("", $timezone_offset_minutes*60, false);
$this->getClientDateTime(new DateTimeZone($clientTimeZone));
//...
public function getClientDateTime(DateTimeZone $dateTimeZone): string
{
return new DateTime('now', $dateTimeZone->format('Y-m-d H:i:s');
}
config/app.php
'timezone' => 'America/New_York',
我正在尝试根据 clientTimeZone Asia/Kolkata
app.timezone
$date = new DateTime();
$timeZone = $date->getTimezone();
echo $timeZone->getName().PHP_EOL;
$timezone_offset_minutes = 330;
$clientTimeZone = timezone_name_from_abbr("", $timezone_offset_minutes*60, false);
echo $clientTimeZone .PHP_EOL;
Session::put('clientTimeZone',$clientTimeZone);
config('app.timezone', $clientTimeZone);
$date = new DateTime();
$timeZone = $date->getTimezone();
echo $timeZone->getName() .PHP_EOL;
这是结果
America/New_York
Asia/Kolkata
America/New_York
我有种感觉
config('app.timezone', $clientTimeZone);
没有生效
DateTime class 接受两个参数,第二个是 ?DateTimeZone $timezone = null
。如果省略或为空,将使用当前时区。
$timezone = new DateTimeZone('America/New_York');
$date = new DateTime('now', $timezone);
Laravel 的 app.timezone
配置不直接影响 DateTime。
在 bootstrapping Laravel 应用程序上,它以这种方式设置时区
date_default_timezone_set($config->get('app.timezone', 'UTC'));
要使用客户端时区,您可以在会话期间全局设置它
$timezone_offset_minutes = 330;
$clientTimeZone = timezone_name_from_abbr("", $timezone_offset_minutes*60, false);
date_default_timezone_set($clientTimeZone);
请记住它不会影响任何其他应用程序,即 mysql。 Mysql 仍将使用 app.timezone
在申请 bootstrap 上阅读。
我建议将客户端时区传递给任何方法、函数并以这种方式使用它
$timezone_offset_minutes = 330;
$clientTimeZone = timezone_name_from_abbr("", $timezone_offset_minutes*60, false);
$this->getClientDateTime(new DateTimeZone($clientTimeZone));
//...
public function getClientDateTime(DateTimeZone $dateTimeZone): string
{
return new DateTime('now', $dateTimeZone->format('Y-m-d H:i:s');
}