php日期时间和区域

php日期时间和区域,php,datetime,cakephp,Php,Datetime,Cakephp,我试图用meridian将一个时间字符串转换为datetime,但我得到了错误的datetime。 这是我的密码: $timeZone = 'Europe/Warsaw'; date_default_timezone_set($timeZone); $millis = 1540399680000; $seconds = $millis / 1000; $date = date("d/m/Y H:i:s a", $seconds); debug($date); $timeZone = ne

我试图用meridian将一个时间字符串转换为datetime,但我得到了错误的datetime。 这是我的密码:

$timeZone = 'Europe/Warsaw';
date_default_timezone_set($timeZone);
$millis  = 1540399680000;
$seconds = $millis / 1000;
$date    = date("d/m/Y H:i:s a", $seconds);
debug($date);
$timeZone = new DateTimeZone('Europe/Warsaw');
$formato  = "d/m/Y H:i:s a";
$fecha    = DateTime::createFromFormat($formato, $date, $timeZone);
debug($fecha);
debug($fecha->format('Y'));
debug($fecha->format('a'));
调试$date的结果

24/10/2018 18:48:00 pm
调试$fecha的结果

object(DateTime) {
    date => '2018-10-25 06:48:00.000000'
    timezone_type => (int) 3
    timezone => 'Europe/Warsaw'
}
我期待的是调试$fecha;
date=>'2018-10-24 06:48:00.000000'

根据文档,DateTime CreateFormFormFormat函数返回DateTime对象。如果您想获得直接输出,请遵循以下代码

$timeZone = 'Europe/Warsaw';
date_default_timezone_set($timeZone);
$millis  = 1540399680000;
$seconds = $millis / 1000;
$date    = date("d/m/Y H:i:s a", $seconds);
debug($date);
$timeZone = new DateTimeZone('Europe/Warsaw');
$formato  = "d/m/Y H:i:s a";
// instead of this
//$fecha    = DateTime::createFromFormat($formato, $date, $timeZone);
// add ->format in the end
$fecha    = DateTime::createFromFormat($formato, $date, $timeZone)->format($formato);
debug($fecha);
你试过使用吗?例如:


您希望得到什么?$fecha这是一个datetime对象,您可以根据需要对其进行格式化;它会给你想要的解决方案
$date = CakeTime::format($seconds, 'd/m/Y H:i:s a', false, 'Europe/Warsaw');
debug($date);