我无法显示正确的时间。使用 config/app.php
中的 UTC 默认设置,我有 4 小时的差异。当我设置本地时区时,我有 2 小时的差异。我认为出现问题是因为我的数据库设置为 CEST 时区。
mysql> SELECT @@system_time_zone;
+--------------------+
| @@system_time_zone |
+--------------------+
| CEST |
+--------------------+
1 row in set (0.00 sec)
我正在处理的页面将在本地使用,这就是为什么我希望数据库中的时间与页面上显示的时间相同。时间正确保存在数据库中,只是显示的时间发生了变化。
数据库 -> Laravel
2020-04-21 16:55:08 -> 2020-04-21T14:55:08.000000Z
我想知道手动修改是否是一个好方法。在这种情况下,我无法更改服务器上数据库中的时区。有什么解决方案或解决方法吗?
更新 #1
如果我正在获取 blade 文件的时间,则此解决方案可以正常工作。
public function getCreatedAtAttribute($value) {
return \Carbon\Carbon::createFromFormat('Y-m-d H:i:s', $value, 'Europe/Warsaw');
}
当我使用 axios createFromFormat 获取条目时,不接受 $value 而不进行处理。不幸的是,这个解决方案没有显示正确的时间。
public function getCreatedAtAttribute($value) {
$data = \Carbon\Carbon::parse($value);
return $data::createFromFormat('Y-m-d H:i:s', $data, 'Europe/Warsaw');
}
更新 #2
我注意到在 config/app.php
中设置本地时区后,时间在 blade.php
文件中正确显示,没有任何访问器。不幸的是,当我使用 axios 下载条目时,Laravel 返回了错误的时间,尽管它已正确保存在数据库中。以下访问器工作正常。
访问方法:
public function getCreatedAtAttribute($value) {
$data = \Carbon\Carbon::parse($value);
return $data->timezone('Europe/Warsaw');
}
我想准确获取数据库中的时间。否则我将不得不为每个模型添加访问器。
最佳答案
最简单直接的方法是更新每个模型以通过将 $timestamps
属性设置为 false
//Ninja Model
public $timestamps = false;
这意味着 Laravel 将不会自动将 created_at
和 updated_at
属性转换为 Carbon 实例,您可以在从数据库。
除此之外,如果您通常需要为 Carbon/Date 时间设置系统范围的时区,即忽略 laravel 在 app.timezone
配置路径中设置的内容。那么您可能需要在 AppServiceProvider
类的 boot()
方法中使用:date_default_timezone_set('Europe/Warsaw')
。
通常,无论您在 app
配置文件中为 timezone
值设置什么值,都应该足以强制执行应用程序范围的时区。
关于php - 使用 axios 以正确的时间从数据库中获取条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61365699/