【问题标题】:Timezones and summer time in different states不同州的时区和夏令时
【发布时间】:2014-04-14 09:20:14
【问题描述】:

我对 PHP IMAP 时区有疑问。

我有一个从我的用户帐户下载电子邮件的服务器。而且用户可以在我的网站上查看他们的电子邮件。

我将服务器的 php 时区设置为 UTC 0,现在我希望我的用户看到电子邮件的接收时间到他们的时区。但问题是夏令时,因为时区改变了 1 小时。

例子:

GMail 给我一封电子邮件,在 UTC (0) 7:00 收到时间。

在意大利,时区是 UTC +1,所以我可以在这个时间上增加 1 小时,然后是 8:00。

但现在在意大利,我们有夏季时区,因此 UTC 必须是 +2 而不是 +1,但并非所有国家都有这个。所以我问是否存在一个在线服务,它可以给我正确的偏移量,我必须添加到小时以显示正确的时间。

提前谢谢你。

【问题讨论】:

  • 或许你可以试试:timezonedb.com/api
  • Alvaro 是正确的,您需要使用地理标识符(又名 IANA/Olson 时区 ID)。另请参阅timezone tag wiki,尤其是“时区!= 偏移量”和“IANA/Olson 时区数据库”部分。

标签: php email date datetime timezone


【解决方案1】:

在意大利,时区在 CET 和 CEST 之间交换,因此您不能使用不反映这一事实的名称对其进行硬编码。您需要使用地理标识符,例如Europe/Rome:

<?php

$utc = new DateTimeZone('UTC');
$rome = new DateTimeZone('Europe/Rome');

$winter = new DateTime('2013-12-31', $utc);
$summer = new DateTime('2013-08-31', $utc);

$winter->setTimezone($rome);
$summer->setTimezone($rome);

echo $winter->format('r') . PHP_EOL;
echo $summer->format('r') . PHP_EOL;
Tue, 31 Dec 2013 01:00:00 +0100
Sat, 31 Aug 2013 02:00:00 +0200

【讨论】:

    猜你喜欢
    • 2013-10-13
    • 2017-03-17
    • 1970-01-01
    • 2012-03-21
    • 2015-08-11
    • 1970-01-01
    • 1970-01-01
    • 2012-04-07
    • 2012-10-31
    相关资源
    最近更新 更多