检查输入的日期是否是季度的开始



下午好!你能告诉我如何实现一个函数,检查通过的日期是否是季度的开始吗?我尝试使用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

相关内容