我有一个带有那些配置的CakePHP 3项目:
app.php:
'defaultLocale' => env('APP_DEFAULT_LOCALE', 'pt_BR'),
'defaultTimezone' => env('APP_DEFAULT_TIMEZONE', 'America/Sao_Paulo'),
bootstrap.php
date_default_timezone_set('America/Sao_Paulo');
当我
echo date("Y-m-d H:i:s");
它显示正确的日期和时间;
但是当我
$data = Time::now();
和
echo $data;
显示为+1小时,因为我们过去为dst添加了一个小时,但今年已取消。
奇怪的部分是当我调试$data
时显示正确,没有+1小时:
\src\Controller\TesteController.php (line 104)
object(Cake\I18n\Time) {
'time' => '2019-10-24T15:15:07-03:00',
'timezone' => 'America/Sao_Paulo',
'fixedNowTime' => false
}
echo data:24/10/2019 16:15:07`
我尝试用]添加时区>
$dateTimeZoneBrasil = new \DateTimeZone("America/Sao_Paulo");
和
$data = Time::now($dateTimeZoneBrasil);
但仍显示+1小时。
UPDATE
这里是重现该问题的测试:
ini_set('intl.default_locale', 'pt_BR'); I18n::locale('pt_BR'); date_default_timezone_set('America/Sao_Paulo'); Time::setToStringFormat([\IntlDateFormatter::SHORT, \IntlDateFormatter::SHORT]); $time = Time::now(); debug($time); debug((string)$time); debug($time->i18nFormat()); debug($time->i18nFormat('yyyy-MM-dd HH:mm:ss')); debug($time->format('Y-m-d H:i:s')); debug($time->getTimezone()->getTransitions(strtotime('2019-01-01'), strtotime('2020-01-01'))); phpinfo(INFO_MODULES);
以及我的结果:
\src\Controller\TesteController.php (line 79) object(Cake\I18n\Time) { 'time' => '2019-10-25T09:34:37-03:00', 'timezone' => 'America/Sao_Paulo', 'fixedNowTime' => false } \src\Controller\TesteController.php (line 80) '25/10/19 10:34' \src\Controller\TesteController.php (line 81) '25/10/19 10:34' \src\Controller\TesteController.php (line 82) '2019-10-25 10:34:37' \src\Controller\TesteController.php (line 83) '2019-10-25 09:34:37' \src\Controller\TesteController.php (line 84) [ (int) 0 => [ 'ts' => (int) 1546308000, 'time' => '2019-01-01T02:00:00+0000', 'offset' => (int) -7200, 'isdst' => true, 'abbr' => '-02' ], (int) 1 => [ 'ts' => (int) 1550368800, 'time' => '2019-02-17T02:00:00+0000', 'offset' => (int) -10800, 'isdst' => false, 'abbr' => '-03' ], (int) 2 => [ 'ts' => (int) 1572750000, 'time' => '2019-11-03T03:00:00+0000', 'offset' => (int) -7200, 'isdst' => true, 'abbr' => '-02' ] ]
模块:
date
date/time support enabled
"Olson" Timezone Database Version 2018.7
Timezone Database external
Default timezone America/Sao_Paulo
Directive Local Value Master Value
date.default_latitude 31.7667 31.7667
date.default_longitude 35.2333 35.2333
date.sunrise_zenith 90.583333 90.583333
date.sunset_zenith 90.583333 90.583333
date.timezone America/Sao_Paulo America/Sao_Paulo
我有一个具有这些配置的CakePHP 3项目:app.php:'defaultLocale'=> env('APP_DEFAULT_LOCALE','pt_BR'),'defaultTimezone'=> env('APP_DEFAULT_TIMEZONE','美国/ ...] >
问题出在运行应用程序的操作系统中。 DST的时区规则已过期。巴西最近更改了夏令时规则。但是其他政府也可以随时这样做。
IANA组织维护着具有时区和其他特征的最新银行。最新版本为2019c,于2019-09-11 [1]发布。