开始日期和结束日期应相差一年
start and end date should be different for one year
您好,我正在使用 Yup 作为我的一个模式的验证器
这是我用于验证架构的代码
start: Yup.date()
.max(new Date(), "Max date")
.min(
new Date(new Date().setFullYear(new Date().getFullYear() - 120)),
"Min date")
),
end: Yup.date().min(Yup.ref('start'), "End date shouldn't be same as start date"),
这可行,但我可以为开始日期和结束日期添加相同的日期。
我希望结束日期早于开始日期
非常感谢
你可以尝试Yup.when来处理这个问题,
它为您提供了一个触发器,在哪些字段更改时应该重新编译架构以及用于处理验证的架构对象
const validationSearch = Yup.object().shape({
start: Yup.date()
.max(new Date(), "Max date")
.min(
new Date(new Date().setFullYear(new Date().getFullYear() - 120)),
"Min date"
),
end: Yup.date()
// .min(Yup.ref("start"), "End date shouldn't be same as start date")
.when("start", (val, schema) => {
if (val) {
const startDate = new Date(val);
startDate.setDate(startDate.getDate() + 1);
return val && schema.min(startDate, "Should beGreater than start date");
}
})
});
请查找示例代码和框 here
可以使用notOneOf实现,如下图:
const Yup = require("yup");
const moment = require("moment");
const schema = Yup.object().shape({
start: Yup.date()
.max(new Date(), "Max date")
.min(new Date(new Date().setFullYear(new Date().getFullYear() - 120)), "Min date"),
end: Yup.date()
.min(Yup.ref("start"), "End date should be higher than the start date")
.notOneOf([Yup.ref("start"), null], "End date should not be the same as the start date")
});
const startDate = moment().subtract(1, "minute").toDate(); //This date has to be smaller than the Date declaration in start.max
const endDate = startDate;
schema.isValid({
start: startDate,
end: endDate
}).then((valid) => {
console.log(valid); //False
});
不幸的是,moreThan 不适用于日期,因此我们需要创建两个单独的检查器:end >= start (min)、end !== start (notOneOf)。
您好,我正在使用 Yup 作为我的一个模式的验证器
这是我用于验证架构的代码
start: Yup.date()
.max(new Date(), "Max date")
.min(
new Date(new Date().setFullYear(new Date().getFullYear() - 120)),
"Min date")
),
end: Yup.date().min(Yup.ref('start'), "End date shouldn't be same as start date"),
这可行,但我可以为开始日期和结束日期添加相同的日期。
我希望结束日期早于开始日期
非常感谢
你可以尝试Yup.when来处理这个问题,
它为您提供了一个触发器,在哪些字段更改时应该重新编译架构以及用于处理验证的架构对象
const validationSearch = Yup.object().shape({
start: Yup.date()
.max(new Date(), "Max date")
.min(
new Date(new Date().setFullYear(new Date().getFullYear() - 120)),
"Min date"
),
end: Yup.date()
// .min(Yup.ref("start"), "End date shouldn't be same as start date")
.when("start", (val, schema) => {
if (val) {
const startDate = new Date(val);
startDate.setDate(startDate.getDate() + 1);
return val && schema.min(startDate, "Should beGreater than start date");
}
})
});
请查找示例代码和框 here
可以使用notOneOf实现,如下图:
const Yup = require("yup");
const moment = require("moment");
const schema = Yup.object().shape({
start: Yup.date()
.max(new Date(), "Max date")
.min(new Date(new Date().setFullYear(new Date().getFullYear() - 120)), "Min date"),
end: Yup.date()
.min(Yup.ref("start"), "End date should be higher than the start date")
.notOneOf([Yup.ref("start"), null], "End date should not be the same as the start date")
});
const startDate = moment().subtract(1, "minute").toDate(); //This date has to be smaller than the Date declaration in start.max
const endDate = startDate;
schema.isValid({
start: startDate,
end: endDate
}).then((valid) => {
console.log(valid); //False
});
不幸的是,moreThan 不适用于日期,因此我们需要创建两个单独的检查器:end >= start (min)、end !== start (notOneOf)。