PHP cli 模式差 8 小时,http 访问时间又对,两边都设置了 PRC,就 cli 不对。

我在artisan tinker 输出时间,就是差8小时。cli的php.ini也设置了~还是不对。太奇怪了。
而fpm通过http访问时间是对的。我真想不多通了。

cli的模式在脚本中设置:date_default_timezone_set('PRC')才对。但是这样很麻烦啊

php
终生学习者
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 10
  1. 检查 laravel 的时区配置。
  2. 使用 php --ini 确定 php.ini 的路径,并确定你改的 php.ini 是这个文件。
  3. 使用 phpinfo(),并使用浏览器打开,确定你 php-fpm 的 php.ini 是和 cli 的 php.ini 是同一个文件。
5年前 评论
终生学习者

@Wi1dcard 我刚刚又取尝试了。laravel时区肯定设置了的就在confg/app.php timezone='PRC'

php cli模式的ini ,在php7.2/cli里。而且也更改了timezone='PRC'
artisan tinker 输出时间误差8小时是不是tinker不加载配置文件啊?tinker里需要单独设置 date_default_timezone_set('PRC')才对

php fpm模式的ini,在php7.2/fpm里,也更改了timezone='PRC' 浏览器访问时间正确

2个不在一起。但是不影响。

5年前 评论
终生学习者

@Wi1dcard 刚刚试过了tinker里是要加载config的 config('app.timezone')=PRC

5年前 评论

你用什么输出的时间?

5年前 评论

http://php.net/manual/zh/datetime.configur...

注意这一句:

date.timezone string
在未设定 TZ 环境变量时用于所有日期/时间函数的默认时区。

所以如果你是低版本 PHP,你还要检查 TZ 环境变量。

另外,建议你使用 date_default_timezone_get 输出一下实际的时区。

5年前 评论
ruke

php.ini可以设置默认时区

5年前 评论
终生学习者

@Wi1dcard 非常感谢你的回答,但是我还是没解决到。我在tinker里用的是

在http访问中
use Carbon\Carbon;
echo Carbon::now()->toDateTimeString();时间正常
echo date_default_timezone_get();返回PRC

在tinker
use Carbon\Carbon;
echo Carbon::now()->toDateTimeString();时间差8小时
echo date_default_timezone_get();返回Etc/GMT+0
但是我在cli中的php.ini也设置了时区啊。而框架是能正常输出config('app.timezone')=PRC

5年前 评论
终生学习者

@Wi1dcard 我感觉是artisan 这个可执行php的文件 默认设置了时区。因为我单独cli php运行都没有问题。

5年前 评论
终生学习者

应该是tinker的问题

5年前 评论

artisan 不会进行设置时区的操作,如果怀疑的话,那也应该是你系统的时区有问题,于是导致 tinker 的底层(psysh)设置了 PHP 时区为系统时区(纯属猜测)。为了确认这一点,你可以写一个 Artisan Command,然后使用 artisan 执行这条命令,输出一下时区看是否正常。

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!