博士后及;PHP-将UTC时间戳转换为本地时间

博士后及;PHP-将UTC时间戳转换为本地时间,php,sql,postgresql,date,timezone,Php,Sql,Postgresql,Date,Timezone,我是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:0

我是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");

您可以使用以下表达式将UTC timestmp转换为时区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。。。和成功的…

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


您可以使用以下表达式将UTC timestmp转换为时区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。。。和成功的…

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


要正确处理夏令时,并避免缩写以不同方式解释时出现歧义,您应该更喜欢完整的IANA时区标识符,
'America/Chicago'
。谢谢,仍然不确定这是否是正确的方法,只是因为添加到查询中需要更长的时间才能完成。有时它只是超时。这是预期的吗?为了正确处理夏令时,并避免缩写可能以不同方式解释的歧义,您应该更喜欢完整的IANA时区标识符,
“America/Chicago”
。谢谢,仍然不确定这是否是正确的方法,这只是因为对查询的添加需要花费更长的时间才能完成。有时它只是超时。这是预期的吗?