Knex从时间列和日期列获取格式化的时间

时间:2018-11-30 18:24:14

标签: node.js knex.js

我有一个用时间类型定义的列和一个用日期类型定义的列。

knex.schema.createTable('receipt', function(table) {
...
    table.date('t_date');
    table.time('t_time');
...
});

它将24小时格式的数据存储在数据库中。例如:22:00:00。日期为'2018-11-30'。但是当我运行选择查询时,它会返回。

{
...
    "transactionDate": "2018-11-29T00:00:00.000Z",
    "transactionTime": "1970-01-01T22:20:00.000Z",
...
}

如何从日期为YYYY-MM-dd且日期为HH:mm:ssAM/PM的选择查询中获取日期?

4 个答案:

答案 0 :(得分:2)

在javascript中选择返回日期等列类型的格式是由数据库驱动程序完成的,而不是由knex完成。

对于Postgresql

Can we always fetch date column as string (varchar) with knex and postgres?

对于mysql

Knexjs returning mysql timestamp, datetime columns as Javascript Date object

应该有帮助。

答案 1 :(得分:1)

oracleDb用户必须设置此环境变量

export ORA_SDTZ='UTC'

更多信息:https://community.oracle.com/docs/DOC-1008911

答案 2 :(得分:1)

下一个代码片段对我来说就像一个魅力:

const { setTypeParser, builtins } = require('pg').types;

const typesToReset = [
  builtins.DATE,
  builtins.TIME,
  builtins.TIMETZ,
  builtins.TIMESTAMP,
  builtins.TIMESTAMPTZ,
];

function resetPgDateParsers() {
  for (const pgType of typesToReset) {
    setTypeParser(pgType, val => String(val)); // like noParse() function underhood pg lib
  }
}

...并在使用pg或库/ or取决于pg(knex,异议等)请求之前调用此函数。

来源:https://github.com/Vincit/objection.js/issues/663#issuecomment-351678734console.log(pg.types)

答案 3 :(得分:0)

var data = {
    "transactionDate": "2018-11-29T00:00:00.000Z",
    "transactionTime": "1970-01-01T2:22:00.000Z"
}

var date = data.transactionDate.split("T")[0];
var time = data.transactionTime.split("T")[1].split(".000Z")[0];
let h = parseInt(time.split(":")[0]);
let m = time.split(":")[1];
let s = time.split(":")[2];
let suffix = "AM";
if(h >= 12){
	h = h==12 ? 12: h%12;
  suffix = "PM";
}
time =("0" + h).slice(-2)+":"+m+":"+s+"/"+suffix;
console.log(date);
console.log(time);