当我有一个时间字符串'2021-05-25',如何生成向后六天的数组

考虑31天的情况
const data = '2021-05-26'
result = ['2021-05-26','2021-05-27','2021-05-28','2021-05-29','2021-05-30','2021-05-31','2021-06-01']

阅读 2.4k
4 个回答

利用Date定位日期,主要还是格式化时间,toLocaleDateString这个跟本地化有关,不建议使用,最好自己写一个或者用库

function getDateRange(start,length) {
    var s = new Date(start);
    return Array.from({length}).map((_,i) => format(new Date(s.getTime()+1000*60*60*24*i)) )
}
function format(d) {
    return d.getFullYear()+'-'+(1+d.getMonth())+'-'+d.getDate()
}
已参与了 SegmentFault 思否「问答」打卡,欢迎正在阅读的你也加入

image.png

image.png

new Array(7).fill(1).map((n,i)=>new Date(new Date( '2021-05-26').getTime() + (1000 * 60 * 60 * 24*i)))

用 Date 偷个懒?

当然,你也可以 一三五七八十腊,三十一天永不差。四六九十一,每月三十天。然后再特殊处理一下2月。

已参与了 SegmentFault 思否「问答」打卡,欢迎正在阅读的你也加入。

可以考虑用 moment.js 或者 day.js 单独写一个获取函数,键入初始日期和顺延天数,循环获取日期,最后返回集合就好。

已参与了 SegmentFault 思否「问答」打卡,欢迎正在阅读的你也加入。
const date = "2021-05-25";

/**
 * 返回后七天,由于Date类复写了Symbol.toPrimitive我们可以对其进行加减乘除
 * @param {*} from 起始时间
 */
const next = (from) => {
  const ans = [];

  const offset = new Date("2021-05-26") - new Date("2021-05-25");
  const base = new Date(date) * 1;

  for (let i = 1; i <= 7; ++i) {
    ans.push(base + i * offset);
  }

  console.log(ans);

  return ans.map((v) => new Date(v).toLocaleDateString().replace(/\//g, "-"));
};

console.log(next(date));
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题