2016-07-06 63 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

謝謝,看來這是一個非常酷的想法。我還注意到,改變拉拉瓦爾全球時區不是一個好主意。 –