【问题标题】:Why is PHP returning the wrong time in PDT?为什么 PHP 在 PDT 中返回错误的时间?
【发布时间】:2021-10-03 11:17:30
【问题描述】:

我的 PHP 安装 (7.4.22) 返回其他时区的正确时间,但不返回 PDT 的正确时间。我的服务器(Ubuntu 18.04.2)在登录时显示正确的 UTC 时间。

示例脚本:-

<?php
$date_str_8601 = '2021-10-03T12:30:00Z'; // Input 12:30 UTC
$dateTime = DateTime::createFromFormat(DateTime::ISO8601, $date_str_8601);
date_timezone_set($dateTime, timezone_open('PDT'));
echo 'PDT ' . date_format($dateTime, 'g:i A'); // Expected: PDT 5:30 AM
date_timezone_set($dateTime, timezone_open('Europe/London'));
echo ', London ' . date_format($dateTime, 'g:i A'); // Expected: London 1:30 PM

预期输出:

PDT 5:30 AM, London 1:30 PM

实际输出

PDT 4:30 AM, London 1:30 PM

为什么我的代码给了我错误的 PDT 时间?我的配置有什么可以修复的吗?

【问题讨论】:

    标签: php datetime


    【解决方案1】:

    PDT 不是受支持的时区名称。请改用America/Los_Angeles

    DateTimeZoneTimezones AmericaList of US Time Zones for PHP to use?

    [更新] PHP 支持list of time zone abbreviations,其中包括 PDT。此列表似乎映射到使用该缩写的所有受支持的时区,因此PDT 映射到美国/洛杉矶、美国/博伊西和亚洲/马尼拉等的时区信息。这三个地方位于不同的时区。

    此外,缩写列表是出于性能原因而编译的,不会反映对系统时区数据库的任何更新。

    我无法确切地确定 PHP 如何从这个缩写列表中选择时区数据。可以说很明显不能依赖,完整的格式名称是要走的路。

    【讨论】:

    • 很好的建议,可能是@Thomas Harris 应该做什么,但它并不能解释所展示的行为。如果不支持 PDT,那么肯定应该以 UTC 格式返回时间吗?看起来它正在返回冬季时间(PST?)。
    • @thelem 我做了更多的挖掘工作。请参阅我的更新答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-22
    • 2016-05-18
    • 2017-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多