发现问题起因:
数据库使用的pg,在使用date类型时,在ide查看字段内容为【2020-02-02】,只会保留年月日,但是使用knex进行查询时,会被knex转换一次,变为【2020-02-01T16:00:00.000Z】(此处为我设置的数据库为z时区,等于北京时间2020-02-02 00:00:00)
我设置为date而不是timestamp的原因不就是我只想将数据存储到day这个时间节点嘛
之后我使用php7+laravel7,复写了这一块查询,发现日期格式正确,就确定了是knex部分是做了转换
原因:
knex中的pg包把postegerSql的date转换成了JavaScript的date格式
解决方案:
knex内部引入了node-pg-types三方包,设置pg的自动转换即可
const { types} = require('pg');
const TYPE_DATESTAMP= 1082; // date转换的OID为1082
types.setTypeParser(TYPE_DATESTAMP, date=> date);
网友评论