使用moment.js获取日期当前季度的最后一天

时间:2020-10-14 12:45:46

标签: javascript momentjs

我有一个JavaScript日期,例如05-04-2020。

我试图弄清楚如何获取该日期的当前季度,然后获取该季度的最后一天。在这种情况下,答案应该是06-30-2020。

下面是我创建的一个函数,但是觉得这不是最好的方法:

function getLastDayOfQuarterMonth(date) {
    let retVal
    const quarter = moment(date).quarter()
    switch(quarter) {
      case 1:
        retVal = new Date(moment(date).year(), 2, 31)
        break;
      case 2:
        retVal = new Date(moment(date).year(), 5, 30)
        break;
      case 3:
        retVal = new Date(moment(date).year(), 8, 30)
        break;
      case 4:
        retVal = new Date(moment(date).year(), 11, 31)
        break;
    }

    return retVal
}

3 个答案:

答案 0 :(得分:0)

我们可以使用moments提供的quarterendOf方法。

const date = "05-04-2020";

const getLastDayOfTheQuarter = (date) => moment().quarter(moment(date, "MM-DD-YYYY").quarter()).endOf('quarter').format("MM-DD-YYYY");

console.log(getLastDayOfTheQuarter(date));
console.log(getLastDayOfTheQuarter(moment().format("MM-DD-YYYY")));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>

为简单起见,我将输入和输出格式视为MM-DD-YYYY。可以根据需要进行更新。

答案 1 :(得分:0)

您可以简单地使用endOf("quarter")

function getLastDayOfQuarterMonth(date) {
  return moment(date, "MM-DD-YYYY").endOf('quarter').toDate();
}
console.log(getLastDayOfQuarterMonth("05-04-2020"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.25.0/moment.min.js"></script>

请注意,您必须立即指定格式以正确解析05-04-2020,请参阅moment(String, String)。您可以使用toDate()获取Moment.js包装的本机Date对象的副本,或者使用format()获取所需的输出。

答案 2 :(得分:0)

您可以使用endOf功能。

示例:

function getLastDayOfQuarterMonth(date) {
    let retVal = moment().quarter(moment(date).quarter()).endOf('quarter').format('MM-DD-YYYY');
    return retVal
}
let date = "05-04-2020";
alert(getLastDayOfQuarterMonth(date));

JSFiddle Link

主要Source