2016-07-06 69 views
0

我已经在云平台上发布了ERP站点,我想为用户分配的时区生成日期时间。Laravel带时区的5代碳日期时间

我使用碳日期时间库进行转换。但是当我转换时,它给了我以下的问题。

$carbon = new Carbon(); 
$carbon->setTimezone('Asia/colombo'); 
echo $carbon;   //output is : 2016-07-06 22:33:05 | Asia/colombo 
BUT 
echo $carbon->now()  // output is : 2016-07-06 17:03:05 | UTC 

为什么$碳>现在是给错了时区中的碳对象也连我都设置时区....

很抱歉,如果我想错了... ......

回答

0

Carbon::now是一个静态函数,你可以在你的对象上调用它,但它是仍然是的一个静态函数。没有底层对象可以从中获取时区信息。您需要执行此操作:Carbon::now('Asia/colombo')

+0

这意味着我要传递的时区的所有功能。 –

+0

不,你可以在回答中使用'$ carbon-> toDateTimeString()'like shock_gone_wild提及。 –

1

如果您在对象上使用Carbon的setTimezone()函数,则应只调用该对象的非静态函数。

手动应用时区后,只需使用非静态输出函数即可。

一些例子:

// without parameters it is now() ! 
$carbon = new Carbon\Carbon(); 
$carbon->setTimezone('Asia/colombo'); 
echo $carbon->toDateTimeString()."<br>"; 
// custom output format 
echo $carbon->format('d.m.Y H:i:s')."<br>"; 

$carbon->setTimezone('Europe/Berlin'); 
echo $carbon->toDateTimeString()."<br>"; 
// custom output format 
echo $carbon->format('d.m.Y H:i:s')."<br>"; 


// or pass something compatible to http://php.net/manual/en/datetime.construct.php 
$carbon = new Carbon\Carbon('24.12.2015 20:13'); 
$carbon->setTimezone('Asia/colombo'); 
echo $carbon->toDateTimeString()."<br>"; 
// custom output format 
echo $carbon->format('d.m.Y H:i:s')."<br>"; 

$carbon->setTimezone('Europe/Berlin'); 
echo $carbon->toDateTimeString()."<br>"; 
// custom output format 
echo $carbon->format('d.m.Y H:i:s')."<br>"; 

静态方法将使用(默认:UTC)在你的config/app.php定义的时区

+0

这可以吗我可以使用date_default_timezone_set($ timeZone-> name); –

+0

我不会调用date_default_timezone_set()...而且我也不会更改Laravel的全球时区以匹配当前用户的时区...只需将您的应用程序所需的所有日期以相同的格式存储并将其转换为输出用户时区... –

+0

谢谢,看来这是一个非常酷的想法。我还注意到,改变拉拉瓦尔全球时区不是一个好主意。 –