Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 日期函数忽略默认时区_Php_Timezone_Php Ini - Fatal编程技术网

Php 日期函数忽略默认时区

Php 日期函数忽略默认时区,php,timezone,php-ini,Php,Timezone,Php Ini,按照最佳实践,不要直接修改php.ini,而是要有单独的文件,我有以下文件: $ cat /etc/php/7.0/apache2/conf.d/99-timezone.ini [Date] date.timezone="America/Los_Angeles" 我可以看到ini文件正在加载,这可以证明。然而,在这两个指令中,只有一个更新为显示America/Los_Angeles,一个是UTC。我甚至不知道UTC来自哪里,因为系统的时间不是UTC: $ timedatectl L

按照最佳实践,不要直接修改
php.ini
,而是要有单独的文件,我有以下文件:

$ cat /etc/php/7.0/apache2/conf.d/99-timezone.ini
[Date]
date.timezone="America/Los_Angeles"
我可以看到ini文件正在加载,这可以证明。然而,在这两个指令中,只有一个更新为显示
America/Los_Angeles
,一个是
UTC
。我甚至不知道UTC来自哪里,因为系统的时间不是UTC:

$ timedatectl
      Local time: Tue 2017-11-07 18:36:56 PST
  Universal time: Wed 2017-11-08 02:36:56 UTC
        Timezone: America/Los_Angeles (PST, -0800)
(snip)
当我运行其中每一项时,我会看到以下输出:

var_dump(ini_get('date.timezone')); //string(19) "America/Los_Angeles"
var_dump(date_default_timezone_get()); //string(3) "UTC"
var_dump(date('e')); //string(3) "UTC"
如何将前两个设置为本地时间?

查看您的,唯一实现这一点的方法(据我所知)是设置日期默认时区('UTC')已在运行时调用。它更改“默认时区”,使其与.ini文件中的
date.Timezone
值不同

因此,请注意以下事项:

  • 在.ini文件中。此指令导致在处理每个PHP文件之前自动添加脚本。如果这是在使用中,并且它加载的PHP文件设置了时区,则可能会导致这种情况

  • 您使用的是PHP框架吗?如果是这样,请在框架的PHP文件中搜索
    date\u default\u timezone\u set
    。例如,WordPress强制时区为UTC

  • 如果不使用框架,您是否使用任何可能包含
    date\u default\u timezone\u set
    的PHP库。如果是这样,那可能就是问题所在



在您的
phpinfo()
输出中这样显示的事实表明它是一个
auto\u prepend\u文件
执行此操作,因为我假设您正在使用一个仅包含
的文件检查phpinfo,如果您有一个“获取”某些内容的函数,则通常有一个将“设置”它的函数。所以你去寻找date_default_timezone_get()并找到它的朋友-date_default_timezone_set(‘美国/洛杉矶’)。@TimBrownlaw谢谢你。如果您阅读了,那么您会注意到,如果未使用
date\u default\u timezone\u set
进行设置,它将返回php.ini中的值。在本例中,不知何故,它跳过了该选项并返回UTC。这可能是一个愚蠢的问题,但在进行任何更改后,您是否重新启动了Apache?另外,您的
var\u dump
调用是否位于通过HTTP加载的
.php
文件中,例如
http://localhost/test.php
?@TimBrownlaw I在
/etc/php/7.0/apache2/php.ini
中取消注释
日期时区
,将其设置为
美国/洛杉矶
,重新启动Apache,在转储中也看到了同样的情况。@sunkerton-您确定代码中没有发生其他事情吗。我这里有一个非常相似的系统,我可以执行你所有的尝试并得到正确的回答。。。你是在本地开发安装还是在托管安装?你用Wordpress一语中的。幸运的是,我把
phpinfo()
扔到了给我意外日期输出的代码块中,如果我只是在一个普通文件中完成的话,我永远也不会捕获它。