在JavaScript中从基准日期获取更多日期

sqxo8psd  于 2023-09-29  发布在  Java
关注(0)|答案(3)|浏览(106)

我有一个这样格式的日期- 20230926(yyyymmdd)。
无论我在运行时得到什么日期,我都希望在数组中有到下一个120天的日期。例如,如果我得到日期20230926。那么我的最终数组应该包含从今天到下一个120天的日期。意味着最终数组将有120条记录。

finalArray = [26-09-2023,27-09-2023,28-09-2023.
   
    .etc till next 120 days]

我该怎么做?

ix0qys7i

ix0qys7i1#

您可以使用for循环来迭代日期对象。对于每个步骤,将日期递增1。

const now = new Date();
const daysInFuture = 120;
const dates = getDatesInRange(now, daysInFuture);
const expectedEndDate = getFutureDate(now, daysInFuture - 1); // Exclusive

console.log(expectedEndDate.toString() === dates[dates.length - 1].toString());
console.log(dates.length === 120);
console.log(dates); // Show all the dates

function getDatesInRange(startDate, count) {
  const results = [], currDate = new Date(startDate.getTime());
  for (let i = 0; i < count; i++) {
    results.push(new Date(currDate.getTime()));
    currDate.setDate(currDate.getDate() + 1);
  }
  return results;
}

function getFutureDate(relativeDate, days) {
  const result = new Date(relativeDate.getTime());
  result.setDate(result.getDate() + days);
  return result;
}
.as-console-wrapper { top: 0; max-height: 100% !important; }
c3frrgcw

c3frrgcw2#

您可以使用getDate()获取当前日期,并增加天数,使用setDate()设置。你必须做120次才能达到极限。
要处理本地时间,

const currentDate = new Date();
const nextDates = [];
const dateLimit = 120;

for(let i = 1; i <= dateLimit; i++){
  const tempDate = new Date();
  tempDate.setDate(tempDate.getDate() + i);
  nextDates.push(tempDate);
}

console.log(nextDates)

对于UTC操作,使用

tempDate.setUTCDate(tempDate.getUTCDate() + i);
q7solyqu

q7solyqu3#

  • 使用正则表达式解析将20230926转换为Date对象
  • 创建一个数组并将其索引Map到从开始日期开始的天数
  • 将日期格式化为所需的格式:
const input='20230926';
const length = 120;

const [, y, m, d] = input.match(/(\d{4})(\d{2})(\d{2})/);
const from = new Date(y, m - 1, d, 0, 0, 0, 0);
from.setMinutes(from.getMinutes() - from.getTimezoneOffset());

const pad = num => num.toString().padStart(2, '0');

const result = Array.from({length}, (_, i, dt = new Date(from)) => 
  dt.setDate(dt.getDate() + i) && 
    `${pad(dt.getDate())}-${pad(dt.getMonth() + 1)}-${dt.getFullYear()}`);

console.log(result);

相关问题