【问题标题】:Postgres & PHP- Converting UTC timestamps to local timePostgres 和 PHP- 将 UTC 时间戳转换为本地时间
【发布时间】:2020-07-26 12:58:02
【问题描述】:

我是 Postgres/SQL 的新手。我正在工作的数据库中的所有时间戳都存储为 UTC 格式。

我正在尝试执行以下查询,但由于时区差异,我的所有结果都已关闭。如何在此查询中解决此问题?我在美国\芝加哥或 CST 时区工作。

select id FROM audit_log WHERE (action_id LIKE '%auth%' AND successful = 'true' AND timestamp BETWEEN '$from' AND '$to'

$from = date("Y-m-d 06:00:00");
$to = date("Y-m-d 11:59:59");

【问题讨论】:

    标签: php sql postgresql date timezone


    【解决方案1】:

    您可以使用以下表达式将您的 UTC 时间戳转换为时区 PST:

    timestamp at time zone 'utc' at time zone 'cst'
    

    在您的查询中:

    select id 
    FROM audit_log 
    WHERE 
        action_id LIKE '%auth%' 
        AND successful = 'true' 
        AND timestamp at time zone 'utc' at time zone 'cst' BETWEEN ? AND ?
    

    无关注释:

    • 如果successful 是一个布尔值,你可以直接使用WHERE ... AND successful AND ...

    • 您应该使用参数化查询,而不是在查询字符串中连接变量;这使您的代码更安全、更高效。

    【讨论】:

    • 为了正确处理夏令时,并避免缩写可能以不同方式解释的歧义,您应该更喜欢完整的 IANA 时区标识符 'America/Chicago'
    • 谢谢,仍然不确定这是否是正确的方法,只是因为对查询的添加需要更长的时间才能完成。有时它只是超时。这是预期的吗?
    猜你喜欢
    • 2019-08-15
    • 2019-03-09
    • 2019-01-05
    • 2013-03-23
    • 2018-09-17
    • 2014-07-18
    • 2015-04-20
    • 2011-02-06
    • 1970-01-01
    相关资源
    最近更新 更多