7

我已经在 Postgres 中声明了一个日期列作为日期。

当我使用节点的 pg 模块写入值时,Postgres 工具 pgAdmin 会正确显示它。

当我使用 pg 读回该值时,日期时间字符串不是纯日期,而是带有错误的日期。

例如:

Date inserted:              1975-05-11
Date displayed by pgAdmin:  1975-05-11
Date returned by node's pg: 1975-05-10T23:00:00.000Z

我可以阻止节点的 pg 将时区应用于仅限日期的数据吗?它适用于出生日期,而 ihmo 时区与此无关。

4

2 回答 2

3

编辑来自开发人员在 github 上的问题响应

node-postgres 团队很久以前就决定在提取日期和日期时间时将没有时区的日期和日期时间转换为本地时间。这与我们过去挖掘的一些文档是一致的。如果您在这里解决旧问题,您会找到讨论。

好消息是它很容易覆盖此行为并返回您认为合适的日期。

这里有关于如何执行此操作的文档: https ://github.com/brianc/node-pg-types

甚至可能有一个模块可以将postgres中的日期转换为您想要的任何时区(我猜是utc)。如果没有……那是写一篇并与大家分享的好机会!

原始消息 看起来这是 pg-module 中的一个问题。我是 JS 和 node 的初学者,所以这只是我的解释。

解析日期(没有时间部分)时,假定为本地时间。pg\node_modules\pg-types\lib\textParsers.js

if(!match) {
    dateMatcher = /^(\d{1,})-(\d{2})-(\d{2})$/;
    match = dateMatcher.test(isoDate);
    if(!match) {
      return null;
    } else {
      //it is a date in YYYY-MM-DD format
      //add time portion to force js to parse as local time
      return new Date(isoDate + ' 00:00:00');

但是当 JS 日期对象被转换回字符串getTimezoneOffset时被应用。pg\lib\utils.js 。function dateToString(date)

于 2015-07-24T11:24:36.903 回答
1

另一种选择是更改列的数据类型:

您可以通过运行以下命令来执行此操作:

ALTER TABLE table_name
ALTER COLUMN column_name_1 [SET DATA] TYPE new_data_type,
ALTER COLUMN column_name_2 [SET DATA] TYPE new_data_type,
...;

如此所述。

我也是同样的问题,我改成text.

于 2020-04-12T16:34:14.987 回答