Im有一个日期时间类型的字段。我看到在数据库中总是保存其他时区,而不是默认的。当呈现节点内容时,日期看起来很好,但是当我试图从代码中获取节点时,我不能在正确的时区中呈现日期。
$node->field_customtime->getValue()我有带有标准时区的数组值,当我转储值时,时间是错误的。所以我试着这样做:
$value = $node->field_customtime->getValue();
$value = $value[0]['value'];
$date = new \DateTime($value);
$date = $date->getTimestamp();
echo \Drupal::service('date.formatter')->format($date);数据库中仍然有原始数据(错误)。我不知道如何从自定义日期字段中更正显示日期。我在表格中看到了正确的日期(即欧洲时间11:00 ),但在数据库中是10:00。在节点页上11:00是正确的,所以drupal以某种方式转换它,但是如何实现??
发布于 2017-01-10 12:22:05
我假设你在使用MySQL?如果是这样的话,除非您正在保存时间戳,否则时区并不重要。它应该被保存在你发送它的方式上。
如果是时间戳,则日期将自动转换为UTC存储,然后转换回在mysql配置中设置的任何时区。
MySQL将时间戳值从当前时区转换为UTC存储,并从UTC转换回当前时区进行检索。(对于其他类型,如DATETIME,则不会发生这种情况。)
您需要首先检查的是如何保存日期。你在储存时间戳吗?
如果不是,您需要检查数据是如何保存的,并查看在插入到数据库之前是否发生了任何事情。
不幸的是,我对Drupal不太了解,但是经过快速的google之后,我发现Drupal 7恰好有一些处理日期时间的方法。这很可能适用于Drupal 8,您只需调整配置即可。https://drupal.stackexchange.com/questions/3613/the-differences-between-date-time-zone-handling
https://stackoverflow.com/questions/41567169
复制相似问题