php - Doctrine 和 DateTime 显示出错误的差异

标签 php mysql symfony datetime doctrine-orm

我无法解决 DateTime() 的问题。我想要数据库中保存的一些时间和现在之间的差异。它可以在我的本地计算机上运行,​​但不能在实时服务器上运行。

这是我的字段定义:

/**
 * @ORM\Column(name="start_time", type="datetime", nullable=true)
 */
protected $startTime;    
/**
 * @ORM\Column(name="end_time", type="datetime", nullable=true)
 */
protected $endTime;

设置开始和结束时间,然后计算差异始终有效:

$diff = $entry->getEndTime()->diff($entry->getStartTime());

如果只设置了开始时间,我想要与当前时间的差异,所以我这样做:

$diff = (new \DateTime())->diff($entry->getStartTime());

但这不起作用。 差异为低 2 小时

开始和结束时间是通过表单输入设置的,如下所示:

// user inputs for example: 08:50 for $start and 17:45 for $end
$dateStr = date('Y-m-d');
$entry->setStartTime(new \DateTime($dateStr.' '.$start));
$entry->setEndTime(new \DateTime($dateStr.' '.$end));

我猜这 2 个小时的休息时间是因为时区为欧洲/柏林而不是 UTC,但是我该如何适应这种情况?

替换new\DateTime()
new\DateTime('now', new\DateTimeZone('Europe/Berlin'))
new\DateTime('now', new\DateTimeZone('UTC'))
没有效果。

感谢您的帮助。

根据要求进行编辑

$currentDate = new \DateTime();
$currentDate->modify($currentDate->getOffset() . ' seconds');
// var_dump($entry->getStartTime())
object(DateTime)#358 (3) {
  ["date"]=> string(19) "2014-06-29 09:20:00"
  ["timezone_type"]=> int(3)
  ["timezone"]=> string(3) "UTC"
}
// var_dump($currentDate)
object(DateTime)#337 (3) {
  ["date"]=> string(19) "2014-06-29 06:50:00"
  ["timezone_type"]=> int(3)
  ["timezone"]=> string(3) "UTC"
}
// local time: 11:20:00
// difference should be: 2:30 but is 0:30

最佳答案

当 Berliner 用户填写 12:00(12:00 欧洲/柏林 - UTC 时间 10:00)时,学说会保存一个没有时区的日期 (12:00)。

当您检索 DateTime 字段时,Doctrine 将其重新创建为 12:00 UTC(默认应用程序时区),而不是 12:00 柏林

因此,您需要存储用户时区,以便将用户提供的日期与系统提供的日期进行比较。请参阅Doctrine documentation

关于php - Doctrine 和 DateTime 显示出错误的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24464558/

相关文章:

php - XMLRPC - Python 服务器,PHP 客户端。没有一致性?

php - 如何使用$.ajax()上传文件

symfony - app/bootstrap.php.cache : failed to open stream: No such file or directory

php - 将数据从数据库中吐出到选择字段

python - 您的 SQL 语法有误;检查与您的 MariaDB 服务器版本对应的手册,了解在第 1 行附近使用的正确语法”,

symfony - 如何在 Sonata Media Bundle 中实现多对多关系

symfony - 使用 Bootstrap 自定义 FOSUserBundle 登录模板

javascript - 动态路由 PHP 和 AngularJS

php - WordPress,编辑链接

php - mysql_fetch_array()/mysql_fetch_assoc()/mysql_fetch_row()/mysql_num_rows 等...期望参数 1 是资源