【发布时间】:2014-01-09 19:51:32
【问题描述】:
我有一些时间戳存储为 Postgres 类型 timestamp without time zone。
我将使用时间戳2013-12-20 20:45:27 作为示例。我打算这代表一个 UTC 时间戳。
在 psql 中,如果我运行查询 SELECT start_time FROM table_name WHERE id = 1,我会按预期返回那个时间戳字符串:2013-12-20 20:45:27。
但是,如果在我的 Node 应用程序中,我使用 node-postgres 库来运行相同的查询,我会返回本地时区的时间戳:Fri Dec 20 2013 20:45:27 GMT-0600 (CST)。这是一个 Javascript 日期对象,但它已经存储为该时区。我真正想要的是一个代表2013-12-20 20:45:27 GMT+0000 的日期对象(甚至只是一个字符串)。我已经知道这次是 UTC。
我尝试将我的 postgresql.conf 文件中的时区参数设置为:timezone = 'UTC',结果没有差异。
我做错了什么?
编辑
问题似乎出在这个文件中:https://github.com/brianc/node-postgres/blob/master/lib/types/textParsers.js
如果从 Postgres 返回的日期字符串没有指定时区(即Z 或+06:30,那么它只会构造一个 JavaScript 日期对象,我相信它只会包含本地时区。我要么需要更改我的应用以在数据库中存储时区,要么覆盖此转换器。
【问题讨论】:
标签: node.js postgresql node-postgres