PHP DateTime抛出时区警告,即使设置了date.timezone


PHP DateTime throws timezone warning even though date.timezone set

我经常收到以下错误:

DateTime::createFromFormat():依赖系统的时区设置是不安全的。需要使用date.timezone设置或date_default_timezone_set()函数。如果您使用了其中任何一种方法,但仍然收到此警告,则很可能是您拼错了时区标识符。我们暂时选择了时区"UTC",但请设置date.timezone以选择您的时区。在中

尽管我在php.ini中指定了DateTime设置,如下所示:

date.timezone = Asia/Jakarta

知道吗?

您只是缺少了一些引号。

date.timezone = "Asia/Jakarta"

祝你好运!

也可能是您没有加载正确的php.ini文件。请参阅这篇文章了解更多信息:php5.3.3 date.timezone再次php.ini指令未考虑

您可以使用

date_default_timezone_set("Asia/Jakarta")

在脚本的开头

也许这个进程在php-cli中运行,因此,您需要将此配置放在cli php.ini中,路径如下:/etc/php5/cli/php.ini

默认情况下,"date.timezone"已被注释,因此请更改此配置:date.timezone=亚洲/雅加达

对于那些在Symfony 3中遇到同样问题的人,将以下构造函数添加到你的app/AppKernel.php文件中,然后重新启动nginx。

public function __construct($environment, $debug)
{
    date_default_timezone_set('Asia/Jakarta');
    parent::__construct($environment, $debug);
}

我还在php.ini中指定了DateTime设置

/Applications/MAMP/bin/php/php7.1.1/conf/php.ini

因为我看到了我在localhost上生成的info.php(在"Loaded Configuration File"中)中的路径。

事实证明它不是所用的那个。试试这个:

php -i | grep php.ini

看看输出是什么。我的是:

/usr/local/etc/php/5.6
Loaded Configuration File => /usr/local/etc/php/5.6/php.ini
PHP Warning:  Unknown: It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in Unknown on line 0

然后我转到"/usr/local/etc/php/5.6",编辑date.timezone行:删除注释(;)并添加"欧洲/柏林"(或者在您的情况下是"亚洲/雅加达")

再次尝试"php-i|grep-php.ini",php警告消息现在应该已经消失了。

php -i | grep php.ini
Configuration File (php.ini) Path => /usr/local/etc/php/5.6
Loaded Configuration File => /usr/local/etc/php/5.6/php.ini

仍然无法使用上述解决方案,请尝试在根目录的.htaccess中添加以下代码并进行检查。

php_value date.timezone America/Denver