Как получить список дней за последний месяц, последние три месяца в MomentJS - PullRequest
0 голосов
/ 08 января 2019

Используя moment().subtract(1, 'days').format("YYYY-MM-DD"), я могу получить последние x дней с текущей даты. Так как я могу получить все дни с прошлого месяца или последние три месяца ..?

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Как узнать количество дней в текущем месяце:

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>
0 голосов
/ 08 января 2019

Если я правильно понимаю ваш вопрос, это может быть достигнуто в два этапа. Сначала рассчитайте момент, который отмечает начальную дату предыдущего месяца:

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>
...