【发布时间】:2013-12-06 16:10:32
【问题描述】:
我正在使用 Node.js、Postgres 和 node-postgres 库。当我尝试使用如下代码插入具有当前日期的新记录时:
client.query('INSERT INTO ideas(date) VALUES($1)', [new Date()], ...);
这运行良好,没有错误。但是,当我对数据库运行 select 语句并记录结果时,给出的日期显示为:
Wed Nov 20 2013 19:00:00 GMT-0500 (EST)
这很好,除了我插入记录时是 11 月 21 日星期四。时间是 5:47,而不是输出显示的 7:00。
我又运行了几次代码,无论何时,它都存储了相同的不准确日期,即使下一小时已经开始。这让我相信,出于某种原因,它只存储日期而不是小时或分钟。此外,日期仅差一天这一事实表明问题可能与 node-postgres 处理日期的方式有关。
我知道在将当前日期传递给查询时,Javascript 计算当前日期不是问题,因为我记录了new Date(),它准确到日期、分钟、小时和秒。
对于这个问题的任何帮助将不胜感激。谢谢!
【问题讨论】:
-
检查服务器
TimeZone设置;查看 Node 是否发送时间戳限定时间,以及您使用的是timestamp还是timestamp with time zone(timestamptz) 类型。还可以考虑在 PostgreSQL 中使用current_timestamp而不是在 Node 中生成时间。 -
刚试过
current_timestamp的东西,还是一样的问题。那将是什么时区设置?在节点服务器创建代码中? -
SHOW TimeZone(SQL 语句)并查看有关“时区”的 PostgreSQL 文档 -
哦,你是对的。我使用的是
date类型而不是timestamptz,所以 Postgres 只记录日期,而不是时间。
标签: node.js postgresql node-postgres