代码之家  ›  专栏  ›  技术社区  ›  Ess

如何获取上个月、过去三个月的时间列表

  •  1
  • Ess  · 技术社区  · 6 年前

    使用 moment().subtract(1, 'days').format("YYYY-MM-DD") 我可以从当前日期算起最近X天。那么,我怎样才能从上个月或过去三个月得到所有的日子呢?

    2 回复  |  直到 6 年前
        1
  •  1
  •   Dacre Denny    6 年前

    如果我正确理解你的问题,这可以通过两个步骤来实现。首先计算标记上个月开始日期的时刻:

    var prevMonth = moment().subtract(1, 'month').startOf('month');
    var prevMonthDays = prevMonth.daysInMonth();
    

    然后,在该范围内迭代 0...prevMonthDays ,计算该范围内每天相对于上个月开始的日期 prevMonth :

      var prevMonthDay = prevMonth.clone().add(i, 'days').format("YYYY-MM-DD");
    

    这样的事情应该能达到你的要求:

    // Get moment at start date of previous month
    var prevMonth = moment().subtract(1, 'month').startOf('month');
    var prevMonthDays = prevMonth.daysInMonth();
    
    // Array to collect dates of previous month
    var prevMonthDates = [];
    
    for (var i = 0; i < prevMonthDays; i++) {
    
      // Calculate moment based on start of previous month, plus day offset
      var prevMonthDay = prevMonth.clone().add(i, 'days').format("YYYY-MM-DD");
      
      prevMonthDates.push(prevMonthDay);
    }
    
    console.log(prevMonthDates)
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.23.0/moment.min.js"></script>

    希望这有帮助!

    更新

    要计算从过去的多个月到当前月初的日期列表,可以将上面的代码概括如下:

    var monthsPast = 4;
    var prevMonthDays = 0;
    var prevMonth = moment();
    
    // Iterate over number of months past that we want to collect dates for
    for (var i = 0; i < monthsPast; i++) {
    
      // Calculate the moment at the start of a previous month
      var prevMonthStart = moment().subtract(i + 1, 'month').startOf('month');
      
      // Increment total range to collect dates over, and update prevMonth
      // to current calculated moment which represents oldest month start
      prevMonthDays += prevMonthStart.daysInMonth();
      prevMonth = prevMonthStart;
    }
    
    // Array to collect dates of previous month
    var prevMonthDates = [];
    
    for (var i = 0; i < prevMonthDays; i++) {
    
      // Calculate moment based on start of previous month, plus day offset
      var prevMonthDay = prevMonth.clone().add(i, 'days').format("YYYY-MM-DD");
      
      prevMonthDates.push(prevMonthDay);
    }
    
    console.log(prevMonthDates)
    <script src=“https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.23.0/moment.min.js”></script>
        2
  •  1
  •   klugjo    6 年前

    这是如何获取当前月份的天数:

    const numberOfDaysInCurrentMonth = moment().daysInMonth();

    因此,您可以通过以下方式获得上个月的天数:

    const numberOfDaysInLastMonth = moment().subtract(1, 'months').daysInMonth();

    现在您需要从上个月开始:

    const startOfLastMonth = moment().subtract(1, 'months').startOf('month');

    您已经准备好开始迭代并构建列表:

    const numberOfDaysInLastMonth = moment().subtract(1, 'months').daysInMonth();
    const startOfLastMonth = moment().subtract(1, 'months').startOf('month');
    
    for (let i = 0; i < numberOfDaysInLastMonth; i = i + 1) {
      console.log(startOfLastMonth.format('YYYY MMM DD'));
      startOfLastMonth.add(1, 'days');
    }
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.23.0/moment.min.js"></script>

    过去3个月,只需更改开始日期和天数:

    const numberOfDaysInLast3Months = moment().subtract(1, 'months').daysInMonth() +
      moment().subtract(2, 'months').daysInMonth() +
      moment().subtract(3, 'months').daysInMonth();
    const startDate = moment().subtract(3, 'months').startOf('month');
    
    for (let i = 0; i < numberOfDaysInLast3Months; i = i + 1) {
      console.log(startDate.format('YYYY MMM DD'));
      startDate.add(1, 'days');
    }
    <script src=“https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.23.0/moment.min.js”></script>