【发布时间】:2020-08-12 06:13:02
【问题描述】:
我正在尝试实现一个方法,如果日期是假日则返回。出于此用例的目的,假期被天真地定义为所有星期日,以及第二个和第三个星期六。这是sn-p的代码,
export const isHoliday = (date: moment.Moment | Date) => {
if (date instanceof Date) {
date = moment(date);
}
const dayOfWeek = date.day();
if (dayOfWeek >= 1 && dayOfWeek < 6) {
// it is a weekday
return false;
}
if (dayOfWeek === 0) {
// it is a sunday
return true;
}
if (dayOfWeek === 6) {
return isSecondSaturday(date) || isThirdSaturday(date);
}
};
还有其他方法,
const isSecondSaturday = (date: moment.Moment) => {
return isNthSaturday(date, 2);
};
const isThirdSaturday = (date: moment.Moment) => {
return isNthSaturday(date, 3);
};
const isNthSaturday = (today: moment.Moment, n: number) => {
const thisMonth = today.clone().utc().startOf("month");
const firstSaturday = thisMonth.day(6); // <-- culprit?
const nthSaturday = firstSaturday.add(n - 1, "week");
return nthSaturday.date() === today.date();
};
在我的测试中,我发现某些月份的第二个和第三个星期六没有正确识别。我认为这可能是我遗漏的一些小事。
【问题讨论】:
-
使用 instanceof 进行测试是 problematic。既然您已经在使用 moment.js,那么请使用 isValid,例如
if (moment.isValid(date)).... -
感谢分享 :) 我会这样做❤️
标签: javascript date momentjs