下午好!你能告诉我如何实现一个函数,检查通过的日期是否是季度的开始吗?我尝试使用moment.js库实现验证,并创建了一个函数
const isStartOfQuarter = (date: string) => {
return moment(date).isSame(moment().quarter(moment(date).quarter()).startOf('quarter'), 'day')
}
当使用日期"2022-04-01"调用此函数时它返回true并且工作正常,但是如果你尝试使用日期"2023-04-01"来调用它。它不能正常工作并返回false
我还需要创建一个函数来检查通过的日期是否为季度结束我为这个
创建了一个函数const isEndOfQuarter = (date: string) => {
return moment(date).isSame(moment().quarter(moment(date).quarter()).endOf('quarter'), 'day')
}
调用日期为"2022-06-30"的函数时它返回true并且工作正常,但是如果你尝试使用日期"2023-06-30"来调用它。它不能正常工作并返回false
你能告诉我如何正确地实现这个功能吗?
我不建议使用momentjs。甚至作者也建议在新的开发中使用替代方案。
在这种情况下,使用原生JavaScript很容易做到这一点,因为毕竟没有那么多的字符:
const isStartOfQuarter = (date) =>
["01-01", "04-01", "07-01", "10-01"].includes(date.slice(5, 10));
const isEndOfQuarter = (date) =>
["03-31", "06-30", "09-30", "12-31"].includes(date.slice(5, 10));
console.log(isStartOfQuarter("2023-04-01"));
我会使用内置的Date
类型。
const isStartOfQuarter = (dateStr) => {
const d = new Date(dateStr);
return d.getUTCDate()==1 && d.getUTCMonth()%3==0
}
const isEndOfQuarter = (dateStr) => {
let d = new Date(dateStr);
d.setDate(d.getDate()+1);
return isStartOfQuarter(d);
}
按照Node:
中宣传的那样工作> isStartOfQuarter("2023-04-01")
true
> isEndOfQuarter("2023-06-30")
true