我正在尝试格式化时间戳,以便它只返回日期,而不像year-dd-mm
那样返回时间。
我的格式如下:u.registered::date
,其中u.registered是没有时区的时间戳。
在psql中,我测试了它,它确实返回日期格式,但在服务器端它仍然返回时间戳格式。
当我在pgadmin上使用db.get_mypage
查询时,它显示如下。
但在节点上,当我运行console.log时,它显示
Node.js
var express = require('express');
var bodyParser = require('body-parser');
var session = require('express-session');
var cors = require('cors');
var massive = require('massive');
var config = require('./config');
var app = express();
app.use(bodyParser.json());
app.use(cors());
var db = massive.connect({connectionString: config.connectionString}, function(err, localdb){
db = localdb;
app.set('db', db);
});
app.get('/mypage/:id', function(req, res, next) {
db.get_mypage([req.params.id], function(err, individual) {
console.log(individual);
if(err) res.status(500).send(err);
else res.send(individual);
})
})
app.listen(3000, function() {
console.log("I am listening");
})
数据库.获取我的页面
select u.user_id, b.book_id, u.username, b.title, b.pages, u.registered::date
from mypage as m
join users u on u.user_id = m.user_id
join book b on b.book_id = m.book_id
where u.user_id = $1;
2条答案
按热度按时间xj3cbfub1#
我不认为问题出在数据库中。PgAdmin显示表明数据库正在生成一真实的
date
值,所以这没问题。问题看起来像是数据库中的值正在被转换为原生JavaScriptDate
。但Date
实际上是完整的时间戳,Date
的时间部分默认为00:00:00:看起来您的库使用的是
Date
构造函数的new Date(y, m, d)
形式。JavaScript中没有不带时间的日期,因此您可能需要使用字符串。您可以在查询中使用
to_char
来获取ISO8601日期字符串:这样可以更好地控制应用的时区。或者,可以确保应用程序的本地时区是UTC,这样您就可以只在应用程序的边缘(即显示和输入)担心时区问题。
kxe2p93d2#
原因是pg(massive使用的引擎)默认将 date、timestamp without time zone 和 timestamp with time zone 转换为原生JavaScript Date对象。但是原生Date对象没有分隔日期和时间。新的Temporal对象可以做到这一点,但是在编写本文时它还处于第3阶段。
通过改变类型解析器,可以使pg返回类型为 date 和 *timestamp(不带时区 *)的字段作为字符串:
我不知道是否巨大剂量的东西额外,但希望你知道什么寻找。