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

Checking if the entered date is the start of a quarter

下午好!你能告诉我如何实现一个功能来检查通过的日期是否是本季度的开始吗? 我尝试使用 moment.js 库实现验证并创建了一个函数

const isStartOfQuarter = (date: string) => {
  return moment(date).isSame(moment().quarter(moment(date).quarter()).startOf('quarter'), 'day')
}

当以日期“2022-04-01”调用此函数时,它 returns 正确且工作正常,但如果您尝试以日期“2023-04-01”调用它,则它不会正常工作并且 returns false

我还需要制作一个函数来检查传递的日期是否为季度末 我为此创建了一个函数

const isEndOfQuarter = (date: string) => {
  return moment(date).isSame(moment().quarter(moment(date).quarter()).endOf('quarter'), 'day')
}

当以日期“2022-06-30”调用此函数时,它 returns 正确且工作正常,但如果您尝试以日期“2023-06-30”调用它,则它不会正常工作并且 returns false

你能告诉我如何正确实现这个功能吗?

我不建议使用 momentjs。即使是作者 recommend using alternatives 也有新的发展。

在这种情况下,使用原生 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"));

我只会使用 built-in 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