【问题标题】:Timezone Conversion is giving one hour more in PHP时区转换在 PHP 中多花一小时
【发布时间】:2020-08-04 09:25:34
【问题描述】:

我有以下脚本:

$data = array(
  'fromTimezone'          => 'Asia/Kolkata',
  'toTimezone'            => 'America/New_York',
  'dateTime'              => '2020-02-06 08:34:11',
  'dateTimeFormat'        => 'Y-m-d H:i:s'
);

$fromTimezone           = $data['fromTimezone'];
$toTimezone             = $data['toTimezone'];
$dateTime               = $data['dateTime'];
$dateTimeFormat         = $data['dateTimeFormat'];


$fromZoneDateTime    = new DateTime($dateTime, new DateTimeZone($fromTimezone));

// synchronizing with the to-Timezone
$fromZoneDateTime->setTimezone(new DateTimeZone($toTimezone));

$returnDateTime    = date($dateTimeFormat, strtotime($fromZoneDateTime->format('Y-m-d H:i:s')));
echo $returnDateTime;

这是给我2020-02-05 22:04:11

但是当我在实时应用程序中检查时区转换的时间时。比如The Time Zone Converter,我得到的数据是2020-02-05 23:04:11

为什么会出现这种不匹配?我该如何克服这个问题?

【问题讨论】:

  • 今天上线不是02-05。
  • @AbraCadaver。你能解释一下吗?
  • 美国的夏令时从 03-08 开始增加了 1 小时,因此您在 02-05 和今天 04-21 之间的支票之间增加了一个小时。

标签: php timezone


【解决方案1】:

您引用的网站向您显示了您当地时区(可能是印度)与纽约时间之间的差异当前日期

您可以使用其他网站来验证您的假设,例如 timeanddate.com、which shows the correct results for the date in question,它们与您的代码输出一致。

至于为什么,请理解虽然印度固定为 UTC+05:30 (IST),但纽约在 UTC-05:00 (EST) 和 UTC-04:00 (EDT) 之间交替)。有关这方面的更多信息,请阅读the timezone tag wiki,尤其是“时区!= 偏移量”部分。您可能还想查看the DST tag wiki

【讨论】:

    【解决方案2】:

    我认为这是因为节省了日光。

    请参考PHP daylight saving time detection

    【讨论】:

    • 如何克服这个问题?
    • 时间就是时间你想克服什么?
    • @Saswat - 没有什么需要克服的。正如 AbraCadaver 指出的那样 - 时间转换是正确的。
    猜你喜欢
    • 1970-01-01
    • 2011-01-31
    • 2022-10-24
    • 1970-01-01
    • 1970-01-01
    • 2013-12-20
    • 1970-01-01
    相关资源
    最近更新 更多