【问题标题】:Node-postgres date not saving accuratelyNode-postgres 日期未准确保存
【发布时间】: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


【解决方案1】:

问题(感谢Craig 指出这一点)是我在我的Postgres 列中使用date 类型,它只记录日期,而不是时间。一旦我切换到timestamptz 类型,一切都运行良好!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多