2017-11-26 2 views
0

私は、1つのフィールドがISOの日付であるmongoDBデータベースを持っています。 私はgraphql(ノード)クエリを使用してテーブルを照会するとき、私は戻って、すべての権利の私のオブジェクトを受け取るが、私はgraphiqlに表示日付形式は、この奇妙な形式である:私は私のリゾルバのフィールドを書き出す場合GrapqQLの日付形式を設定します

"created": "Sun Nov 26 2017 00:55:35 GMT+0100 (CET)" 

表示されます:

2017-11-25T23:55:35.116Z 

どのように私はグラフのISOの日付を表示するように日付形式を変更しますか?

フィールドはちょうど私のデータ型の文字列として宣言されています。私はMongoDBので自動的に設定されて作成されたベースに値を挿入すると

type MyString { 
    _id: String 
    myString: String 
    created: String 
} 

EDIT 私のシンプルなタイプは以下のように定義されます。

私がクエリを実行すると、obejctsの配列が返されます。 (確認用)私のレゾルバでは、私は次のようにします。

getStrings: async (_, args) => { 
     let myStrings = await MyString.find({}); 
     for (var i = 0; i < myStrings.length; i++) { 
      console.log(myStrings[i]["created"]); 
     } 

    return myStrings; 
} 

を返された配列に日付を作成されたすべてのオブジェクトの形式は次のとおりです。

2017-11-25T23:55:35.116Z 

が、私はGraphIqlでそれを見たときには、として示しています

"created": "Sun Nov 26 2017 00:55:35 GMT+0100 (CET)" 

私の質問はなぜフォーマットを変更するのですか?

私のモデルはこれを文字列として定義しているので、操作しないでください。しかし、それはしません。それは私を困惑させる。

キム

あなたのリゾルバで

答えて

1

は、単に「なぜ[日付文字列]チェンジ・フォーマット」追加の質問に、答えるためにtoISOString()

const date1 = new Date('2017-11-25T23:45:35.116Z').toISOString(); 
console.log({date1}); 
// => { date1: '2017-11-25T23:45:35.116Z' } 

const date2 = new Date('Sun Nov 26 2017 00:55:35 GMT+0100 (CET)').toISOString(); 
console.log({date2}) 
// => { date2: '2017-11-25T23:55:35.000Z' } 

が更新使用してフォーマットされた文字列を返しますか?

Mongoは日付を文字列として保存しません。 1970年1月1日から経過した秒数である(ISO 8601:1970-01-01T00:00(ISO 8601:1970-01-01T00:00))をカウントしていないUnixエポック(Unix時間、別名POSIX時間)として日付を格納します。 :00Z)。あなたはデータモデルは、文字列を要求しているので、それはあなたのための行動を明確にする必要があることtoString()

const date1 = new Date('2017-11-25T23:45:35.116Z').toString(); 
console.log({date1}) 
// => { date1: 'Sat Nov 25 2017 15:45:35 GMT-0800 (PST)' } 

を使用して値を強制変換、しかし、あなたはおそらく、本当にやりたいことはcreatedが適切になるようにモデルを変更されますDateと入力します。あなたはこれをいくつかの方法で行うことができます。

  1. カスタムスカラー
  2. それとも
    • graphql-date
    • ため、既に上記の処理を行い、既存のパッケージを使用して作成私を助けるためにあなたの時間を割いてgraphql-iso-date
+0

感謝。私は少し質問を編集しました。 –

関連する問題