Php 字符串到日期时间的转换从初始时间减去1小时

Php 字符串到日期时间的转换从初始时间减去1小时,php,datetime,Php,Datetime,因此,从$initialTime我使用IntlDateFormatter::parse()(时区是'Europe/Moscow') 然后我将$timeStamp解析为DateTime,并将其时区设置为相同,但它输出: $initialTime = "31.03.2015 17:59"; $timeStamp = (new IntlDateFormatter('en_US', IntlDateFormatter::SHORT, IntlDateFormatter::SHORT, 'Europe/M

因此,从
$initialTime
我使用
IntlDateFormatter::parse()
(时区是
'Europe/Moscow'

然后我将
$timeStamp
解析为
DateTime
,并将其时区设置为相同,但它输出:

$initialTime = "31.03.2015 17:59";
$timeStamp = (new IntlDateFormatter('en_US', IntlDateFormatter::SHORT, IntlDateFormatter::SHORT, 'Europe/Moscow', IntlDateFormatter::GREGORIAN,'dd.MM.yyyy HH:mm'))->parse($initialTime);
$dt = new DateTime('@'.$timeStamp.' UTC');
$dt->setTimezone(new DateTimeZone('Europe/Moscow')); 
var_dump($dt);

为什么初始时间与输出时间相差一小时?

看起来像是用
IntlDateFormatter
编写的
Timestamp
from
DateTime
对象与解析的对象不同

class DateTime#1 (3) {
  public $date =>
  string(19) "2015-03-31 16:59:00"
  public $timezone_type =>
  int(3)
  public $timezone =>
  string(13) "Europe/Moscow"
}
输出:

$initialDate = new DateTime();
$initialDate->setTimeZone(new DateTimeZone('Europe/Moscow'));
$initialTime =$initialDate->format('d.m.Y H:i');
echo $initialTime, "\n";
echo "Real timestamp: ", $initialDate->getTimestamp(), "\n";
$timeStamp = (new IntlDateFormatter('ru_RU', IntlDateFormatter::SHORT, IntlDateFormatter::SHORT, 'Europe/Moscow', IntlDateFormatter::GREGORIAN,'dd.MM.yyyy HH:mm'))->parse($initialTime);
echo "Parsed timestamp: ", $timeStamp, "\n";

第一个操作不是设置系统时间,该类表示国际日期格式化程序=IntlDateFormatter是,不是。对不起,我的英语不好,但仍然存在错时的问题。注意,它是来自
\Symfony\Component\Form\Extension\Core\DataTransformer\DateTimeToLocalizedStringTransformer::reverseTransform()
的代码。
01.04.2015 16:39
Real timestamp:   1427895596
Parsed timestamp: 1427891940