如何简化JavaScript中获取14个日期的代码?
优化Moment.js获取14个日期的方法
你可以用循环或者数组生成器批量创建这14个日期,不用逐个声明变量,下面是两种实用的实现方式:
方式一:生成日期数组
如果只需要按顺序存储日期对象,用数组是最简单的方案,一行代码就能搞定:
// 生成包含14个日期的数组,顺序为「今天 → 13天前」(共14天) const last14Days = Array.from({ length: 14 }, (_, index) => moment().subtract(index, 'd'));
如果需要反过来按「13天前 → 今天」排列,直接反转数组即可:
last14Days.reverse();
要是你不需要包含今天,想取「昨天 → 14天前」的14个日期,只需调整subtract的参数:
const last14DaysWithoutToday = Array.from({ length: 14 }, (_, index) => moment().subtract(index + 1, 'd'));
方式二:生成带描述性键名的对象
如果还是想要类似原代码里today、yesterday这种可读的键名,可以用循环生成一个对象,自动给每个日期命名:
const dateCollection = {}; for (let i = 0; i < 14; i++) { let key; switch(i) { case 0: key = 'today'; break; case 1: key = 'yesterday'; break; default: // 超过1天的情况,按「N_days_ago」命名,比如3_days_ago key = `${i}_days_ago`; } dateCollection[key] = moment().subtract(i, 'd'); }
之后你就可以通过dateCollection.today、dateCollection.yesterday、dateCollection.5_days_ago访问对应的日期对象。
如果需要区分周和天(比如1_week_ago),可以扩展命名逻辑:
const dateCollection = {}; for (let i = 0; i < 14; i++) { let key; if (i === 0) { key = 'today'; } else if (i === 1) { key = 'yesterday'; } else if (i < 7) { key = `${i}_days_ago`; } else { const weeks = Math.floor(i / 7); const remainingDays = i % 7; key = remainingDays === 0 ? `${weeks}_weeks_ago` : `${weeks}_weeks_${remainingDays}_days_ago`; } dateCollection[key] = moment().subtract(i, 'd'); }
这样i=7时键名是1_weeks_ago,i=9时是1_weeks_2_days_ago,更贴合日常表述。
内容的提问来源于stack exchange,提问作者XNQ
相关产品推荐
相关产品推荐

