【问题标题】:PHP Time Zone AdjustmentPHP时区调整
【发布时间】:2023-03-25 13:28:02
【问题描述】:

我有一个以 UTC 时间发送给我的时间,但我想对其进行调整,使其位于东海岸时间 (EST/EDT) 日期的外部边缘。也就是说,我希望用户能够输入以 EDT/EST 为中心的日期,并使用 UTC 正确日期进行查询。

$start_date$end_date 是通过 GET 变量传递的 MM/DD/YYYY 格式的日期。

 $start_date = date('Y-m-d 00:00:00', $start_date);
 $end_date = date('Y-m-d 23:59:59', $end_date);

这些日期用于数据库查询,其时间以 UTC 时间存储。

因此,我希望开始日期是前一天晚上 8 点或晚上 7 点,具体取决于夏令时,然后在 7:59:59 或 6:59:59 结束,同样取决于夏令时。

我该怎么做?

【问题讨论】:

  • 您使用的是哪个数据库?例如,Postgres 有一个名为“timestamp with time zone”的字段类型,它完全符合您的要求。数据库会处理您所有的时区转换。
  • 你检查date_default_timezone_set()函数了吗?

标签: php timezone date


【解决方案1】:

如果您知道数据来自哪个时区,您可以执行以下操作:

$userTimezone = new DateTimeZone('America/New_York');
$systemTimezone = new DateTimeZone('Europe/London');

$ts = new DateTime($datetime, $userTimezone);
$ts->setTimezone($systemTimezone);

return $ts->format('Y-m-d H:i:s');

其中 $datetime 是根据这些规则的有效日期格式 - http://www.php.net/manual/en/datetime.construct.php

这是我们在 web2project 中所做的核心 - http://web2project.net/ - 在用户选择的时区中获取日期时间,但将其存储在 GMT/UTC 中。

【讨论】:

    【解决方案2】:

    在 MySQL 中,您可以执行以下操作:

    SELECT * FROM tablename WHERE date = DATE_SUB('2010-06-17 00:00:00',INTERVAL 4 HOUR);
    

    【讨论】:

      猜你喜欢
      • 2011-04-22
      • 2013-06-29
      • 2014-04-09
      • 1970-01-01
      • 1970-01-01
      • 2010-11-29
      • 2012-07-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多