我的理解是你的系統存儲的日期爲UTC(這是一個好主意,如果該系統可能需要由用戶從不同的時區訪問)。我也明白,當管理員輸入日期時,它會在保存到數據庫之前轉換爲UTC(這也是相當明智的做法)?現在,你需要能夠從數據庫中讀取並在當地時出示日期:
$database_time = '2017-09-02T21:00:00';
$date_obj = DateTime::createFromFormat('Y-m-d\TH:i:s', $database_time, new DateTimeZone('UTC'));
$your_tz = new DateTimeZone('Europe/Warsaw');
$date_obj->setTimeZone($your_tz);
var_dump($date_obj);
如果你需要做的相反(節省的本地時間爲DB UTC或只顯示UTC時間),然後:
$local_time = '2017-09-02T23:00:00';
$date_obj = DateTime::createFromFormat('Y-m-d\TH:i:s', $database_time, new DateTimeZone('Europe/Warsaw'));
$db_tz = new DateTimeZone('UTC');
var_dump($date_obj);
然而,如果已知時區數據庫中存儲數據,而你只需要那個時候UTC它的物質轉化:
$database_time = '2017-09-02T21:00:00';
$date_obj = DateTime::createFromFormat('Y-m-d\TH:i:s', $database_time, new DateTimeZone('Europe/Warsaw'));
$date_obj->setTimeZone(new DateTimeZone('UTC'));
echo $date_obj->format('Y-m-d\TH:i:s');
'createFromFormat()'的真正之處在於它允許整個事物成爲一個單一的線程:''echo DateTime :: createFromFormat('Ymd \ TH:i:s',$ database_time,new DateTimeZone('UTC' )) - > setTimezone(new DateTimeZone('Europe/Warsaw')) - > format('Ymd H:i:s');':) – Narf
你很接近,而不是與代碼,理解。存儲在數據庫中的時間在當前時區(與示例「Europe/Bucharest」保持一致)。 – Andrew
好的,在這種情況下,我的答案中的第二個示例仍然會執行,您只需要假設$ local_time實際上是您嘗試轉換爲UTC的時間。 –