流明显示与保存的时间不同的是 MYSQL DB

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

我当前的时区是 Asia/Karachi 当我从 mysql 检索表数据时它给我(实际时间 - 5 小时)

例如:

mysql 列值:'2021-04-21 01:34:57'

当我从 laravel DB::table('table_name')->get()->toArray(); 检索时;

它给出以下内容:2021-04-20 20:34:57

并且更改我的时区也不会改变任何东西。

所以还有什么我想念的吗?

顺便说一句,我创建了以下路线来检查我当前的时区

$app->get('/timezone', function () {
    return date_default_timezone_get();
});

它给出了保存在我的环境中的相同内容,即(亚洲/卡拉奇)但这不会改变我从 mysql 获得的结果,即使我将它更改为亚洲/加尔各答等其他时区。

我试着研究这个但没有得到任何合适的答案。

mysql laravel timezone lumen
3个回答
1
投票

我尝试了很多东西来解决这个问题,比如 添加环境变量

APP_TIMEZONE="Asia/Karachi"
(没有用) 我也尝试添加
DB_TIMEZONE="+05:00"
(这在我当地有效但不适用于分期)

最后我在某个地方看到其他人有完全相同的问题来解决这个问题,他通过使用碳增加时间来做到这一点

'posted_at' => Carbon::parse($record->posted_at)->addHours(5)->toDateTimeString(),

我知道这不是最佳解决方案,但这是唯一有效的解决方案,所以我不得不接受它。


0
投票

https://dev.mysql.com/doc/refman/8.0/en/datetime.html

如果您存储一个 TIMESTAMP 值,然后更改时区并检索该值,则检索到的值与您存储的值不同。发生这种情况是因为没有在两个方向上使用相同的时区进行转换。当前时区可用作 time_zone 系统变量的值。

据我所知,你有几件事要考虑:

你的 Laravel/Lumen 应用的时区

这可以在

config/app.php
->
timezone
中找到。

MySQL 服务器的时区

您可以使用以下方式检索:

mysql> SELECT @@global.time_zone, @@session.time_zone;

服务器本身的时区

如果上面的 mySQL 查询返回

SYSTEM
,这意味着它使用系统时区设置,对于 Debian/Ubuntu 等你可以检查使用:

cat /etc/timezone

根据我的经验,你通常可以保持系统/mySQL 时区不变,只在 Laravel 配置中设置正确的时区。我知道这让我头疼,因为我第一次不得不弄清楚它是如何工作的。


0
投票

我设置了 DB_TIMEZONE="Europe/Tallinn" 一切正常

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