0

Итерация по диапазону дат в NodeJS

10

Я хотел бы пройтись по диапазону календарных дат, увеличивая дату на один день в каждой итерации. Я использовал что-то, основанное на JodaTime в Java. Есть ли что-то похожее в Node.js?

4 ответ(ов)

0

Я бы хотел предложить изменение к раннему ответу от Мэтта. Его код приведет к мутации объекта a. Попробуйте это...

var moment = require('moment');
var a = moment('2013-01-01');
var b = moment('2013-06-01');

for (var m = moment(a); m.isBefore(b); m.add(1, 'days')) {
    console.log(m.format('YYYY-MM-DD'));
}

В этом коде используется метод moment(a) для создания нового объекта, который не изменяет исходный объект a. Таким образом, вы избегаете побочных эффектов и мутации объекта времени.

0

Вот одно из решений без использования внешних библиотек:

var start = new Date('October 1, 2020 03:00:00Z');
var now = new Date();

for (var d = start; d < now; d.setDate(d.getDate() + 1)) {
  console.log(d);
}

Результат:

2020-10-01T03:00:00.000Z
2020-10-02T03:00:00.000Z
2020-10-03T03:00:00.000Z
2020-10-04T03:00:00.000Z
2020-10-05T03:00:00.000Z
2020-10-06T03:00:00.000Z

Обратите внимание, что Z в конце первой даты обозначает UTC. Если вам нужно указать ваше временное пояснение, просто уберите букву Z.

0

Чтобы использовать библиотеку node-date-utils и легко перебирать даты, вы можете сделать это следующим образом:

require('date-utils');

var d = new Date('2013-01-01');
var e = new Date('2013-06-01');

for(var i = d; i.isBefore(e); i.addDays(1)) {
  console.log(i.toFormat("YYYY-MM-DD"));  
}

В данном примере мы создаем два объекта Dated и e, представляющие начальную и конечную дату соответственно. Затем с помощью цикла for перебираем каждую дату с шагом в один день, используя метод addDays(1), пока текущая дата не станет равной или не превысит конечную дату e. Внутри цикла мы выводим каждую дату в формате "YYYY-MM-DD" с помощью метода toFormat.

Такой подход позволяет удобно работать с датами и делает код более читаемым.

0

Вы можете обойтись без использования библиотеки moment, используя встроенные функции JavaScript для работы с датами. Вот как это можно сделать:

Первый способ — это просто использовать цикл for, чтобы итерировать по датам. Например, чтобы вывести все даты с 1 ноября 2022 года по 30 ноября 2022 года, вы можете сделать это следующим образом:

for (const date = new Date(2022, 10, 1); date < new Date(2022, 11, 1); date.setDate(date.getDate() + 1)) {
  console.log(date)
}

Но также вы можете создать функции для более удобной работы с датами. Вот пример из двух функций: одна для добавления дней к дате, а другая для итерации по диапазону дат:

export function addDate(date: Date, value = 1) {
  const newDate = new Date(date)
  newDate.setDate(newDate.getDate() + value)
  return newDate
}

export function* iterateDate(startDate: Date, endDate: Date) {
  for (let date = startDate; date <= endDate; date = addDate(date))
    yield date
}

Теперь вы можете использовать эту функцию итерации так:

for (const date of iterateDate(new Date('2022-10-01'), new Date()))
  console.log(date)

Это удобный способ итерировать по датам без дополнительных библиотек, используя только возможности JavaScript.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь