Node :: date不转换没有区域的时间戳

时间:2017-04-11 18:52:18

标签: node.js postgresql date

我正在尝试格式化时间戳,因此它只返回日期,而不是像year-dd-mm那样的时间。

我格式化为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 个答案:

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