2017-11-26 2 views
0

Ich habe eine MongoDB-Datenbank, in der ein Feld ein ISO-Datum ist. Wenn ich die Tabelle mit einer graphql Abfrage (Knoten) Abfrage i erhalte meine Objekte zurück in Ordnung, aber das Datumsformat i in graphiql sehen ist in diesem seltsamen Format:set GrapqQL date format

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

wenn ich schreibe das Feld aus in meinem Resolver Shows:

2017-11-25T23:55:35.116Z 

Wie kann ich das Datumsformat ändern, so dass es ISO Daten in graphiql zeigen?

Das Feld ist nur als eine Zeichenfolge in meinem Datentyp deklariert.

EDIT My einfachen Typ ist definiert als:

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

Wenn ich einen Wert in die erstellte Basiseinsatz eingestellt wird automatisch durch MongoDB.

Wenn ich die Abfrage ausführen, gibt es ein Array von Objects zurück. In meinem Resolver (zur Kontrolle) ich folgendes tun:

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

    return myStrings; 
} 

alle Objekte in der zurückgegebenen Arrays erstellt Datum haben die Form:

2017-11-25T23:55:35.116Z 

, aber wenn ich es in GraphIql sehen es zeigt, wie:

meine Frage ist: Warum ändert es Format?

Da mein Modell dies als String definiert, sollte es nicht manipuliert werden, sondern nur das Format beibehalten. Aber das tut es nicht. Es verwirrt mich.

Kim

Antwort

1

In Ihrem Resolver, kehrt nur eine formatierte Zeichenfolge unter Verwendung 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' } 

AKTUALISIERTEN die zusätzliche Frage zu beantworten: "Warum [das Datum string] Format ändern"?

Mongo speichert das Datum nicht als Zeichenfolge. Es speichert das Datum als eine Unix-Epoche (alias Unix-Zeit, auch bekannt als POSIX-Zeit), das ist die Anzahl der Sekunden, die seit 1. Januar 1970 ohne Schaltsekunden (in ISO 8601: 1970-01-01T00: 00 : 00Z). Da Sie Datenmodell sind eine Zeichenfolge anfordert, wird es den Wert mit 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)' } 

zwingen, dass das Verhalten für Sie klären sollte, aber was wahrscheinlich wollen Sie wirklich zu tun ist, das Modell zu ändern, so dass created richtig ist getippt als Date. Sie können dies auf verschiedene Arten tun.

  1. Erstellen Sie eine benutzerdefinierte Skalar
  2. oder ein vorhandenes Paket verwenden, das bereits funktioniert die oben für Sie
+0

Vielen Dank für Ihre Zeit zu helfen mir. Ich habe meine Frage ein wenig bearbeitet. –