1. ホーム
  2. node.js

[解決済み] joiライブラリを使用して2つの時間を比較する方法

2022-01-28 19:01:23

質問事項

回フィールドが2つあります。joiライブラリを使用してバリデーションを適用する必要があります。 現在、私は検証を適用していますが、次のようなエラーが表示されます。 TypeError: joi.string(...).required(...).less is not a function. 検証は、計画された開始時刻は計画された終了時刻より小さくなければなりません。! 以下のコードを実行しました。

{
schema=joi.object({
  taskname:joi.string().required().label('Please enter Task Description!'),
  task:joi.string().invalid(' ').required().label('Please enter Task Description!'),
  taskn:joi.string().min(1).max(80).required().label(' Task Description too long.'),
  projectname:joi.string().required().label('Please select Project !'),
  type:joi.string().required().label('Please select Task Type !'),
  status:joi.string().invalid('None').required().label('Please choose Status'),
  plannedstarttime:joi.string().regex(/^([0-9]{2})\:([0-9]{2})$/).required().label('Please fill Planned Start Time !'),
  plannedendtime:joi.string().regex(/^([0-9]{2})\:([0-9]{2})$/).required().label('Please fill Planned 
   End Time !'),
  plantime:joi.string().required().less(joi.ref('plannedendtime')).label('Planned Start time should 
  be less than Planned End time. !'),
}) 
result=schema.validate({taskname:taskname,task:taskname,taskn:taskname,type:tasktype,projectname:projectname,status:request.body.status,plannedstarttime:plannedstarttime,plannedendtime:plannedendtime,plantime:plannedstarttime});
}

このバリデーションを実現するにはどうしたらよいですか?

どのように解決するのですか?

正しい型を使っていることを確認する必要があります。 string を定義していません。 less メソッドがないので、エラーになります。

を削除することができます。 plantime を提供し カスタムバリデーション関数 を実装しています。 文字列比較 :

schema = joi.object({
  ...
  // plantime: // <-- remove it
  ...
}).custom((doc, helpers) => {
    if (doc.plannedstarttime > doc.plannedendtime) {
        throw new Error("Planned Start time should be lower than Planned End time!");
    }
    return doc; // Return the value unchanged
});

もう1つの選択肢として考えられるのは date という型があります(ちなみに、時間だけでなく、日付も知る必要はないのでしょうか?)

schema = joi.object({
  ...
  plannedstarttime: joi.date().required() ...
  plannedendtime: joi.date().required().greater(joi.ref('plannedstarttime')) ...
  // plantime // <-- remove it
  ...
});

次に plannedstarttimeplannedendtime をある方法で使用します。 format . このフォーマットは moment.jsの書式 . 例えば、時+分だけを表示するフォーマットは、次のようになります。 HH:mm .