2017-05-05 99 views
0

我有不同時區的客戶,我需要分析他們的系統日誌,這些日誌打印在他們的本地機器時區。PHP格式化日期時間不關心時區

例如:週一4月3日0點五十分15秒CST 2017年

其實我並不關心自己的時區,我需要在我的應用只是他們的本地時間打印,所以在我的打印輸出應用程序端必須是:2017-04-03 00:50:15

如何轉換給定的日期而不關心他們的時區或我的本地服務器時區,或​​者不必在我的應用程序中設置date_default_timezone_set? 有沒有任何PHP功能來做到這一點?

我想盡量避免使用字符串操作。

謝謝你提前。

BR // g^

回答

1

那麼,對於所有與時間相關的操作,PHP希望你設置一個default時區(否則警告給出)。不過,我認爲你只是在尋找一種格式化操作。

<?php 
date_default_timezone_set("UTC"); 
$source = "Mon Apr 03 00:50:15 CST 2017"; 
$dateOb = new DateTime($source); 
print_r($dateOb); 
echo $dateOb->format("Y-m-d H:i:s"); 

輸出:

DateTime Object 
(
    [date] => 2017-04-03 00:50:15.000000 
    [timezone_type] => 2 
    [timezone] => CST 
) 
2017-04-03 00:50:15 
+0

太棒了!這個作品非常好!這是我正在尋找的。謝謝 ! :) – guete

0

你可以使用date_format,如果你只是想格式化你的日期。

$date=date_create("Mon Apr 03 00:50:15 CST 2017"); 
echo date_format($date,"Y-m-d H:i:s"); 
+0

它會給你警告:PHP警告:date_create():依靠系統的時區設置是不安全的。 – guete

0

你需要設置你想要的時區,通過使用date_default_timezone_set('parameter');設置時區標識符中所有日期/時間功能。在http://php.net/manual/en/timezones.php找到支持的時區列表。然後用date_default_timezone_get();來得到你給定的時區

<?php 
date_default_timezone_set('Asia/Manila'); 
date_default_timezone_get(); 
echo date('Y-m-d H:i:s') ; 
?>