2017-04-11 63 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,這樣您只能擔心應用程序邊緣的時區問題(即顯示和輸入)。

相關問題