Cake \ I18n \ Time对象回显错误的小时加上夏令时

问题描述 投票:0回答:1

我有一个带有那些配置的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','美国/ ...] >

php time internationalization cakephp-3.0 dst
1个回答
0
投票

问题出在运行应用程序的操作系统中。 DST的时区规则已过期。巴西最近更改了夏令时规则。但是其他政府也可以随时这样做。

IANA组织维护着具有时区和其他特征的最新银行。最新版本为2019c,于2019-09-11 [1]发布。

© www.soinside.com 2019 - 2024. All rights reserved.