在 Laravel 上使用 `diffForHumans()` 时,Carbon 不会自动转换时区
Carbon doesn't automatically convert timezone when using `diffForHumans()` on Laravel
我是 Laravel 的新手,正在研究 Carbon(这是我第一次使用甚至听说过它)。
我创建了一个简单的博客,其中显示评论的 created_at
(timestamp
列)和 Carbon 的 diffForHuman()
。我设法显示了它,但它显示的不是 "x minutes ago" "z hours from now"(正是我的时区和 UTC 之间的差异,即 UTC+z),就好像这些评论来自未来。
这是我的代码:
{{ $comment->created_at->diffForHumans() }}
由于我从不更改 config/app.php
中的时区,我假设 Carbon 不会自动将 timestamp
转换为 diffForHumans()
上的当前时区。
我是否必须明确设置时区才能使 Carbon 显示正确的差异?还是我做错了什么?
编辑:
我完全了解apokryfos所说的时间转换(保存为UTC并转换为客户端时区以供显示)。
我注意到了一些事情。首先,我 运行 我的应用 php artisan serve
和我的数据库 (10.1.33-MariaDB) XAMPP。因此,我的应用程序的时区是 UTC(默认配置),我的数据库与我的机器相同(UTC+z)。所以我在想,也许当我的应用程序检索到 created_at``timestamp
时,我的数据库在我机器的时区 (UTC+z) 中返回了 created_at
,这很奇怪。 如果是这种情况,为什么 Laravel 在检索时不会自动将 timestamp
转换为应用程序的时区? 返回的 timestamp
是否有可能? s 时区被视为与应用程序具有相同的时区?
您可以使用访问器在模型中应用 return 之前日期的时区,如下所示:
public function getCreatedAtAttribute($date)
{
return Carbon::parse($date)->timezone('your time zone goes here'); //example Europe/Amsterdam
}
发生这种情况是因为我的应用程序和我的数据库有不同的时区。我的数据库 运行 XAMPP 与我的机器 (UTC+z) 和我的应用程序 运行 与 php artisan serve
具有相同的时区,因此具有默认配置的时区( UTC).
将我的应用程序配置到与我的机器相同的时区后,Carbon 的 diffForHumans()
显示正确的差异。
我是 Laravel 的新手,正在研究 Carbon(这是我第一次使用甚至听说过它)。
我创建了一个简单的博客,其中显示评论的 created_at
(timestamp
列)和 Carbon 的 diffForHuman()
。我设法显示了它,但它显示的不是 "x minutes ago" "z hours from now"(正是我的时区和 UTC 之间的差异,即 UTC+z),就好像这些评论来自未来。
这是我的代码:
{{ $comment->created_at->diffForHumans() }}
由于我从不更改 config/app.php
中的时区,我假设 Carbon 不会自动将 timestamp
转换为 diffForHumans()
上的当前时区。
我是否必须明确设置时区才能使 Carbon 显示正确的差异?还是我做错了什么?
编辑: 我完全了解apokryfos所说的时间转换(保存为UTC并转换为客户端时区以供显示)。
我注意到了一些事情。首先,我 运行 我的应用 php artisan serve
和我的数据库 (10.1.33-MariaDB) XAMPP。因此,我的应用程序的时区是 UTC(默认配置),我的数据库与我的机器相同(UTC+z)。所以我在想,也许当我的应用程序检索到 created_at``timestamp
时,我的数据库在我机器的时区 (UTC+z) 中返回了 created_at
,这很奇怪。 如果是这种情况,为什么 Laravel 在检索时不会自动将 timestamp
转换为应用程序的时区? 返回的 timestamp
是否有可能? s 时区被视为与应用程序具有相同的时区?
您可以使用访问器在模型中应用 return 之前日期的时区,如下所示:
public function getCreatedAtAttribute($date)
{
return Carbon::parse($date)->timezone('your time zone goes here'); //example Europe/Amsterdam
}
发生这种情况是因为我的应用程序和我的数据库有不同的时区。我的数据库 运行 XAMPP 与我的机器 (UTC+z) 和我的应用程序 运行 与 php artisan serve
具有相同的时区,因此具有默认配置的时区( UTC).
将我的应用程序配置到与我的机器相同的时区后,Carbon 的 diffForHumans()
显示正确的差异。