2017-01-04 2 views
3

Ich verwende Joi Paket ein Zeitstempel-Feld zu validieren, aber wie kann ich einen max() Wert drauf, ich will den Eingangszeitstempel kleiner als aktuellen ZeitstempelJoi Unix-Zeitstempel max Wert

var schema = Joi.object().keys({ 
    t: Joi.date().timestamp('unix').max(moment().unix()), 
}) 

aber ich habe den Fehler, dass:

Kind "t" schlägt fehl, da [ "t" muss kleiner sein als oder gleich "Sun 18. Januar 1970 07.35.17 GMT + 0330 (IRST)" ]

Ich bin sicher, dass die moment().unix() den aktuellen Zeitstempel zurückgibt, aber hier ist es in String gegossen.

Antwort

0

Es sieht nicht wie Joi.date().max() akzeptiert Unix-Timestamps richtig aus, obwohl Sie in Ihrem Schema angeben können, dass ein Unix-Timestamp für eingehende Werte erwartet wird.

Wenn Sie das aktuelle Datum in Ihrem Schema verwenden müssen, können Sie die Zeichenfolge 'now' anstelle des Datums übergeben. Oder stellen Sie sicher, dass Sie das aktuelle Datum im Format eingeben, das .max() erwartet. Ich habe das mit Millisekunden versucht und es scheint wie erwartet zu funktionieren. Ich denke, Joi verwendet den Standard-Konstruktor Date unter der Haube, um Daten zu erstellen, um zu vergleichen, welche Millisekunden erwartet.

var schema = Joi.object().keys({ 
    t: Joi.date().timestamp('unix').max(moment().unix() * 1000) 
}); 

Aus der Dokumentation auf date.max()

Hinweisen: ‚Jetzt‘ kann anstelle von Datum überschritten werden, um immer relativ zum aktuellen Datum zu vergleichen, so dass ein Datum explizit zu gewährleisten, ist entweder in die Vergangenheit oder in der Zukunft.