2017-04-11 30 views
0

我想格式化时间戳,所以它只返回日期而不是像year-dd-mm那样的时间。Node :: date不转换没有区域的时间戳

我这样格式化u.registered::date其中u.registered是没有时区的时间戳。

在psql中,我测试了它并确实返回日期格式,但在服务器端它仍然返回时间戳格式。

当我在pgadmin上使用db.get_mypage查询时,它会显示像这样。

enter image description here

但在节点时,我CONSOLE.LOG它显示 enter image description here

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; 

回答

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,这样您只能担心应用程序边缘的时区问题(即显示和输入)。

相关问题