【发布时间】:2021-02-11 21:31:34
【问题描述】:
假设有一个名为 Request 的 Eloquent 模型,其列 next_check 自动转换为 date (protected $dates = ['next_check'];)。
APP_TIMEZONE 是最初的欧洲/赫尔辛基 (+02:00)
$ artisan tinker
Psy Shell v0.10.4 (PHP 7.4.11 — cli) by Justin Hileman
>>> $pr = Request::find(1);
>>> $pr->next_check = Carbon\Carbon::now();
>>> $pr->save();
>>> Request::find(1)->next_check;
=> Illuminate\Support\Carbon @1603973824 {#2900
date: 2020-10-29 14:17:04.0 Europe/Helsinki (+02:00),
}
看起来一切正常,假设我们在赫尔辛基,我们节省了 14:17:04。
现在将时区更改为欧洲/柏林 (+01:00),我会假设返回 13:17:04。
>>> Request::find(1)->next_check;
=> Illuminate\Support\Carbon @1603977424 {#2900
date: 2020-10-29 14:17:04.0 Europe/Berlin (+01:00),
}
时区已更改,但仍有返回的时间,该时间最初保存在欧洲/赫尔辛基时间。
这是一种预期的行为吗?我怎样才能获得我想要的行为,即应用时区的更改会导致转换时间?
p.s.:laravel中配置的db时区还是默认的'+00:00'
【问题讨论】:
-
你需要实现什么?您想根据当前时区向用户显示不同的日期/时间吗?
-
其实我问这个问题更多是为了了解 Laravel 中的时区处理,并希望相信时代,我明白了。当我的应用程序处于 +02:00 并且我将时间戳保存到数据库时,它应该在内部保存为 UTC 时间戳。我在 phpMyAdmin 中看到的另一个时间是由于时区配置。但是现在当我得到应用程序时区 +01:00 的时间时,不应该将它从数据库 UTC 时间戳转换为我的应用程序时区吗?它只是添加了一个时区而不转换时间,这让我不信任该数据,我正在考虑是否应该切换到 datetime 字段?
-
也许 laravel 不认为时间戳总是在 UTC 中,而是在应用程序时区?所以我需要在更改应用时区时始终更改数据库时区?
-
您无法使用现有日期更改数据库时区。请考虑在后端使用 UTC medium.com/@kylekatarnls/… 这是方法。赫尔辛基/柏林时区应该为用户格式化。
标签: laravel timezone php-carbon