在postgres中使用“日期”数据类型时显示错误的日期

时间:2017-04-20 19:05:46

标签: php postgresql date types

某些表使用“date”数据类型。在旧系统(psql 9.1 / PHP5.3)中,当日期存储在数据库中时,它会被正确存储。但是,在新系统(psql 9.6 / PHP 7.1)中,日期存储不正确。例如,在旧系统中存储7/13/10时,它会存储以下内容:

stage_date |      to_timestamp
------------+------------------------
1279004400 | 2010-07-13 00:00:00-07

在新系统中存储相同日期时,它会存储以下内容:

 stage_date |      to_timestamp
------------+------------------------
 1278979200 | 2010-07-12 17:00:00-07

两个操作系统都设置为“America / Los_Angeles”。旧数据库设置为使用“localtime”(在9.1中将使用系统时区)。新数据库使用“PDT”。

在新系统中,旧系统中的值会被设置为“1279004400”与“1278979200”的原因是什么?

表定义的一部分:

    Column    |           Type      
--------------+---------------------
 id           | integer             
 stage_date   | date                

1 个答案:

答案 0 :(得分:0)

如果其他人在这里结束:表视图使用提取功能将日期转换为纪元。 PostgreSQL版本9.2中提取的行为发生了变化。

  

此更改将恢复在7.3版中进行的考虑不周的更改。   从UTC午夜测量是不一致的,因为它制作了   结果取决于时区设置,计算的时间   不应该是没有时区的时间戳。以前的行为   通过将输入值随时间推移到时间戳来保持可用   区。

有关详细信息,请参阅以下问题的答案: Different results for extract epoch on different PostgreSQL servers