php - 使用 axios 以正确的时间从数据库中获取条目

标签 php mysql laravel timezone axios

我无法显示正确的时间。使用 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

以这种方式使用 Cast
//Ninja Model

public $timestamps = false;

这意味着 Laravel 将不会自动将 created_atupdated_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/

相关文章:

php - 检索最后插入的 iD,然后上传到 MySQL。 #PDO #PHP

php - 将 Cloudinary 与 spatie/media-library Laravel 包一起使用

php - 将第 n 种颜色添加到 php 循环

php - 我可以在之前附加的调用结果中嵌套 ajax 调用的点击吗?

mysql - 删除行导致mysql错误

mysql - 从数据库的所有mysql表名中删除前缀

php - POST 到 Laravel Passport 路由以创建客户端时出现 419 错误

php - 我需要清除哪些 Laravel 缓存才能消除有关丢失迁移文件的错误?

php - Laravel:未找到 Layouts.master

php - 如何在 slim3 php 中将文件上传到另一台服务器