在正确的时区中从日期字段中渲染日期?

时间:2017-01-10 10:58:28

标签: php datetime drupal drupal-8

我有一个日期时间类型的字段。我在数据库中看到总是保存其他时区而不是我的默认值。 呈现节点内容时,日期看起来很好,但是当我试图从代码中获取节点时,我无法在正确的时区中呈现日期。

$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以某种方式转换它,但如何??

1 个答案:

答案 0 :(得分:0)

我会假设您使用的是MySQL? 如果是这样,那么除非您保存时间戳,否则时区无关紧要。它应该完全按照您发送的方式保存。

如果是时间戳,则日期会自动转换为UTC进行存储,然后转换回您在mysql配置中设置的任何时区。

  

MySQL将TIMESTAMP值从当前时区转换为UTC进行存储,然后从UTC转换回当前时区进行检索。 (对于其他类型,例如DATETIME,不会出现这种情况。)

首先需要检查的是如何保存日期。你在存储时间戳吗?

如果不是,您需要检查数据的保存方式,并查看插入数据库之前是否发生了任何事情。

不幸的是我对Drupal了解不多,但在快速谷歌之后我发现Drupal 7碰巧有几种处理日期时间的方法。很有可能这可能适用于Drupal 8,您只需要调整配置。 https://drupal.stackexchange.com/questions/3613/the-differences-between-date-time-zone-handling