为Carbon Date格式化时区

50

我正在尝试为Carbon对象中的日期设置时区。在本地工作良好,但在生产环境中一直提示Bad timezone错误。

我已经尝试过:

$date->setTimezone('7');
$date->setTimezone('+7');
$date->setTimezone('7:00');
$date->setTimezone('+7:00');
$date->setTimezone('UTC 7');
$date->setTimezone('UTC +7');
$date->setTimezone('UTC 7:00');
$date->setTimezone('UTC +7:00');

不知道为什么我的生产环境会出现问题。也没有找到任何关于输入格式的“正确”文档,可以在这里输入。请问有人可以帮忙吗。

提醒一下:本地使用的是Windows系统,而生产环境是Ubuntu系统。


它和这个问题中的问题是否相同:https://stackoverflow.com/questions/36447379/carbonnow-with-time-offset-result-in-different-behaviors? - Yevgeniy Afanasyev
3个回答

82

您可以使用此代码更改时区:

$timestamp = '2014-02-06 16:34:00';
$date = Carbon::createFromFormat('Y-m-d H:i:s', $timestamp, 'Europe/Stockholm');
$date->setTimezone('UTC');

这个格式在我的本地(Ubuntu)和生产环境(Redhat)的项目中都能正常工作。


1
我卡住了,因为我尝试使用createFromTimestamp设置时区,即使它接受第二个参数。显然,时间戳始终是在UTC中... - Mladen Janjetovic
@mladen-janjetović,你能给我展示一下你的代码,你是怎么尝试的吗? - Safoor Safdar
如果您想更改应用程序的格式,您应该根据自己的需求设置config/app.timezone组件。 - Safoor Safdar
如果我没记错的话,代码大概长这样:$date = Carbon::createFromTimestamp($timestamp, 'EST'); 但是当调用 ->timezone('UTC') 的时候,它并没有返回正确的时间。app.timezone 已经设置为 UTC。使用 createFromFormat 就可以解决这个问题。 - Mladen Janjetovic
2
Carbon会考虑夏令时吗? - Etienne Marais

19
我认为你应该参考官方 PHP 时区列表。在你的情况下,可以使用。

$date->setTimezone('Asia/Phnom_Penh');

对于UTC+7:00。


这个应该添加到carbon.php文件还是控制器中? - Rodney Zanoria

14

对于那些想知道的人,你可以像这样链接时区:

Carbon::now()->timezone('Europe/Stockholm')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接