如何在Laravel 4中更改输出日期的时区?

时间:2014-05-23 16:02:49

标签: laravel-4 timezone php-carbon

我有一个带有entity表和users表的数据库。实体表包含created_atupdated_at的字段。 users表的timezone字段的默认值为America/Toronto

在我看来,我可以使用以下代码以我想要的格式输出日期:

$entity->created_at->format('M j, Y \\a\\t g:i A')

现在,如何使用users表中的timezone字段输出日期? 有点像...

$entity->created_at->format('M j, Y \\a\\t g:i A', Auth::user()->timezone);

我正在寻找一种使用Carbon执行此操作的简单方法(因为我在Laravel中使用Eloquent,它会将上述日期列转换为Carbon实例)。

注意:我只希望在显示日期时更改时区 - 我仍然希望所有日期都存储在数据库的默认UTC时区中。

另外,我在哪里可以找到可与Carbon一起使用的有效时区列表?我想将这些存储在我的数据库中,以便用户可以更改其默认时区。

1 个答案:

答案 0 :(得分:4)

您需要使用Carbon函数copy()来保持对象上的时区不变。然后你可以将时区设置为你想要的任何东西,然后输出'结果。

$entity->created_at->copy()->tz(Auth::user()->timezone)->format('M j, Y \\a\\t g:i A');

至于时区 - it is just PHP timezones

$tzlist = DateTimeZone::listIdentifiers(DateTimeZone::ALL);