2017-04-11 4 views
0

タイムスタンプをフォーマットしようとしていますので、時刻はyear-dd-mmのように返されません。Node :: dateはゾーンなしのタイムスタンプを変換しません

この形式はu.registered::dateです。ここで、u.registeredはタイムゾーンなしのタイムスタンプです。

psqlでは、私はそれをテストし、日付形式を返しますが、サーバー側ではまだタイムスタンプ形式を返します。

私がdb.get_mypageというクエリをpgadminで使用すると、次のように表示されます。

enter image description here

しかし、ノード上で、私はそれは私が考えていない 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

を表示するにconsole.logとき問題はデータベースにあります。 PgAdminの表示は、データベースが実際のdate値を生成していることを示しています。この問題は、データベースの値がネイティブJavaScript Dateに変換されているように見えます。しかしDate sが00:00:00に実際にフルタイムスタンプとDateデフォルトの時刻部分です:あなたのライブラリーは、Dateコンストラクタのnew Date(y, m, d)形式を使用しているよう

> new Date(2017, 4, 10).toISOString() 
    "2017-05-10T07:00:00.000Z" 
> new Date('2017-04-10').toISOString() 
    "2017-04-10T00:00:00.000Z" 

が見えます。

JavaScriptには時刻がないので、代わりに文字列を処理する必要があります。

select ..., to_char(u.registered, 'YYYY-MM-DD') 

あなたに適用されているもののタイムゾーンをより良くコントロールを与える必要があります:あなたはISO8601日付文字列を取得するクエリでto_charを使用することができます。または、アプリケーションのローカルタイムゾーンがUTCであることを確認することで、アプリケーションの非常に端にあるタイムゾーンの問題(つまり、表示と入力)を心配することができます。

関連する問題