【发布时间】:2019-01-26 09:50:03
【问题描述】:
我创建了一个实体,其日期时间设置为 08:50:35,时区 "+00:00"。我重新加载实体,日期时间为 08:50:35,时区为 "+02:00"。 时区已更改!
将 Symfony 3.4 与 Doctrine、PHP 7.2、MySQL 5.7 和 Ubuntu 16.4 或 Debian 8 结合使用。
我使用了一个外部库,它使用来自时间戳指令的 DateTime::createFromFormat。所以保留它会很好。
这是我将问题简化为的代码:
// Create entity with date.
$report = new CronReport();
$date = \DateTime::createFromFormat('U', '1534755035');
var_dump($date); // object(DateTime)#536 (3) {
// ["date"]=> string(26) "2018-08-20 08:50:35.000000"
// ["timezone_type"]=> int(1)
// ["timezone"]=> string(6) "+00:00" }
$report->setRunAt($date);
$report->setRunTime(0);
$report->setExitCode(0);
$report->setOutput('');
$this->em->persist($report);
$this->em->flush();
// Reload Entity.
$id = $report->getId();
$this->em->detach($report);
$report = this->em->getRepository('CronCronBundle:CronReport')->find($id);
$date = $report->getRunAt();
var_dump($date); // object(DateTime)#550 (3) {
// ["date"]=> string(26) "2018-08-20 08:50:35.000000"
// ["timezone_type"]=> int(3)
// ["timezone"]=> string(12) "Europe/Paris" }
建表声明:
CREATE TABLE `cron_report` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`job_id` int(11) DEFAULT NULL,
`run_at` datetime NOT NULL,
`run_time` double NOT NULL,
`exit_code` int(11) NOT NULL,
`output` longtext COLLATE utf8mb4_unicode_ci NOT NULL,
PRIMARY KEY (`id`),
KEY `IDX_B6C6A7F5BE04EA9` (`job_id`),
CONSTRAINT `FK_B6C6A7F5BE04EA9` FOREIGN KEY (`job_id`) REFERENCES `cron_job` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
怎么了?如何设置实体日期时间并保留其时区?
【问题讨论】:
-
我认为这可能是由于
mysql自己的timezone settings。从本质上讲,如果您将日期时间值存储为字符串,则不会发生这种情况,但由于您没有,因此您必须进行设置。
标签: php mysql symfony doctrine timezone