【问题标题】:Convert UTC date&time to Europe/Lisbon将 UTC 日期时间转换为欧洲/里斯本
【发布时间】:2021-04-13 09:39:25
【问题描述】:

我想为欧洲/里斯本转换日期 UTC,但我的代码给了我不同的输出/时间:

$datafull = "13-04-2021 08:47:13";

$date = new DateTime($datafull);
$date->setTimezone(new DateTimeZone('Europe/Lisbon')); 
echo $date->format('d-m-Y H:i:s (e)'); 
// 13-04-2021 09:47:13 (Europe/Lisbon)

$datetime = new DateTime($datafull, new DateTimeZone('Europe/Lisbon'));
print $datetime->format('d-m-Y H:i:s (e)');
// 13-04-2021 08:47:13 (Europe/Lisbon)

【问题讨论】:

  • 你能澄清一下问题是什么吗?你希望达到什么目标?
  • @Grilse 有两组输出不同的代码,SO 想知道为什么它们不同。

标签: php datetime data-conversion


【解决方案1】:

当你向DateTime 构造函数提供一个时区对象时,你是在告诉它$datafull 在哪个时区。所以在:

$datetime = new DateTime($datafull, new DateTimeZone('Europe/Lisbon'));

你说它在欧洲/里斯本,它就一直呆在那里。

在其他代码中:

$date = new DateTime($datafull);
$date->setTimezone(new DateTimeZone('Europe/Lisbon')); 

在构造DateTime 时使用默认时区,可能是您的服务器上的 UTC,然后在第二行将其更改为 Europe/Lisbon ,提前一个小时。

见:DateTime::__construct

【讨论】:

  • 如果 $datafull 代表 UTC 时间,那么这个时区也应该在创建时指定,以便独立于服务器设置: $datetime = new DateTime($datafull, new DateTimeZone(' UTC'));
  • @NelsonSalvador 正如我试图解释的那样,第二段代码是正确的,如果您的服务器正在运行 UTC
猜你喜欢
  • 2017-03-24
  • 2015-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多