我已在Postgres中将日期列声明为日期。
当我使用节点的pg模块写入值时,Postgres工具pgAdmin会正确显示它。
当我使用pg读取值时,而不是普通日期,日期时间字符串出现错误的一天。
e.g:
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时区与此无关。
答案 0 :(得分:3)
编辑来自开发人员在github上的回复
node-postgres团队很久以前决定转换日期和日期时间 没有时区到当地时间拉出来。这是一致的 我们过去挖过一些文件。如果你扎根 通过旧问题,你可以找到讨论。
好消息是它很容易过度使用这种行为并返回 但是你认为合适的日期。
这里有关于如何执行此操作的文档: https://github.com/brianc/node-pg-types
甚至可能是一个可以转换日期的模块 postgres到你想要的任何时区(我猜测)。而如果 那不是......这是一个很好的机会来写一个&与大家分享!
原始消息 看起来这是pg-module中的一个问题。 我是JS和节点的初学者,所以这只是我的解释。
当解析日期(没有时间 - 部分)时,假设当地时间。 PG \ node_modules \ PG-类型\ 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)
答案 1 :(得分: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,
...;
如here所述。
我遇到同样的问题,我改为text
。