我的理解是你的系统存储的日期为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的时间。 –