我正在尝试格式化时间戳,因此它只返回日期,而不是像year-dd-mm
那样的时间。
我格式化为u.registered::date
,其中u.registered是没有时区的时间戳。
在psql中,我测试了它并确实返回了日期格式,但在服务器端它仍然返回时间戳格式。
当我在pgadmin上使用db.get_mypage
查询时,它会显示如下。
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");
})
db.get_mypage
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;
答案 0 :(得分:1)
我不认为问题出在数据库中。 PgAdmin显示表明数据库正在生成一个真实的date
值,这样就可以了。问题看起来像数据库中的值正在转换为本机JavaScript Date
。但是Date
s实际上是完整时间戳,而Date
的时间部分默认为00:00:00:
> new Date(2017, 4, 10).toISOString()
"2017-05-10T07:00:00.000Z"
> new Date('2017-04-10').toISOString()
"2017-04-10T00:00:00.000Z"
您的图书馆看起来正在使用new Date(y, m, d)
构造函数的Date
形式。
JavaScript中没有日期 - 没有时间,因此您可能需要使用字符串。您可以在查询中使用to_char
来获取ISO8601日期字符串:
select ..., to_char(u.registered, 'YYYY-MM-DD')
这应该可以让您更好地控制应用的时区。或者您可以确保应用程序的本地时区是UTC,这样您就只能担心应用程序边缘的时区问题(即显示和输入)。