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

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

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

php
终生学习者
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 10
  1. 检查 laravel 的时区配置。
  2. 使用 php --ini 确定 php.ini 的路径,并确定你改的 php.ini 是这个文件。
  3. 使用 phpinfo(),并使用浏览器打开,确定你 php-fpm 的 php.ini 是和 cli 的 php.ini 是同一个文件。
6年前 评论
终生学习者

@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 个不在一起。但是不影响。

6年前 评论
终生学习者

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

6年前 评论

你用什么输出的时间?

6年前 评论

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

注意这一句:

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

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

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

6年前 评论
ruke

php.ini 可以设置默认时区

6年前 评论
终生学习者

@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

6年前 评论
终生学习者

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

6年前 评论
终生学习者

应该是 tinker 的问题

6年前 评论

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

6年前 评论