【发布时间】:2017-09-17 13:57:17
【问题描述】:
有些表使用“日期”数据类型。在旧系统(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”。旧数据库设置为使用“本地时间”(在 9.1 中将使用系统时区)。新数据库使用“PDT”。
什么会导致旧系统中的值设置为“1279004400”与新系统中的“1278979200”?
部分表定义:
Column | Type
--------------+---------------------
id | integer
stage_date | date
【问题讨论】:
-
您的客户使用什么时区?..
show time zone -
客户端使用PDT。
-
我建议使用
timestamptz以避免与时区混淆,但如果可以的话,您可能会这样做 -
我不明白。值 1279004400 不是
date数据类型的合法值。 -
函数 extract(epoch from stage_date) as stage_date 用于将日期从“2010-07-13”转换为 1279004400。
标签: php postgresql date types