我有2个日期字段,我想验证开始日期应该早于结束日期。我的逻辑正确地验证了这一点,但唯一的问题是我可以为开始和结束日期选择相同的日期和时间,它不会显示任何错误。我如何修改以下内容以检查相等的开始日期和结束日期?
const licenseSchema = Yup.object().shape<ObjectSchemaDefinition<FormData>>({
licenseStart: Yup.date(),
licenseEnd: Yup.date().when('licenseStart', {
is: (start) => start != null,
then: (end) =>
end.min(
Yup.ref('licenseStart'),
'License end date cannot be before start date',
),
}),
});
我的领域
<Field name="licenseStart" label="From" as={DateTimeTextField} />
<Field name="licenseEnd" label="To" as={DateTimeTextField} />
按如下方式更新模式。在本地回购测试,工作良好。您可以根据需要更新if
块内的条件。
const licenseSchema = Yup.object().shape<ObjectSchemaDefinition<FormData>>({
licenseStart: Yup.date().typeError('required'),
licenseEnd: Yup.date().typeError('required')
.test('checkEndDate', '', function (value) {
const { path, parent, createError } = this;
if ((parent.licenseStart).getTime() >= value.getTime()) {
return createError({
path,
message: 'License end date cannot be before start date',
});
}
return true;
}),
}),