例如,将时间范围从05/10/2019到05/25/2019。
此时间间隔上的日期需要这样汇总(为简便起见,省略了{2019
):
const result = [
[ '05-10', '05-11', '05-12'], // week 1
['05-13', '05-14', '05-15', '05-16', '05-17', '05-18', '05-19'], // week 2
['05-20', '05-21', '05-22', '05-23', '05-24', '05-25' ], // week 3
];
用JS解决此问题的最佳方法是什么?
是否可以通过在任何一天设置一周的开始来实现此目标?
软件包moment
和moment-range
会对此有所帮助吗?
答案 0 :(得分:1)
您可以查看日期,如果日期是1
(星期一),请在结果中创建new Array
:
const startDate = new Date('05-10-2019'),
endDate = new Date('05-25-2019'),
result = [];
function _twoDigits(x) {
return String(x).padStart(2, '0');
}
let tmp = startDate;
do {
if (tmp.getDay() === 1 || result.length === 0) {
// Create a week Array
result.push([]);
}
const str = `${_twoDigits(tmp.getMonth() + 1)}-${_twoDigits(tmp.getDate())}`;
// Add this date to the last week Array
result[result.length - 1].push(str);
// Add 24 hours
tmp = new Date(tmp.getTime() + 86400000);
} while (tmp.getTime() <= endDate.getTime());
console.log(result);
注意:MomentJS可能会有所帮助,但这是一个很大的库。如果您只需要对日期进行2或3个基本操作,我建议您不要使用它。如果您需要对日期进行大量处理,那么可以,它是一个功能强大的库,可为您节省大量时间。
答案 1 :(得分:1)
如果您对moment.js
代码感兴趣,这是一种可能的实现方式。
但是正如blex所说的那样,它是一个很大的库。
const start = moment('2019-05-10');
const end = moment('2019-05-25');
const array = [[]];
const from_date = moment(start).startOf('isoWeek');
const to_date = moment(end).endOf('isoWeek');
let j = 0;
let added = 0;
for (let currentDate = moment(from_date); currentDate <= to_date; currentDate.add(1, 'day')) {
if (added === 7) {
array.push([]);
j++;
added = 0;
}
if (currentDate.isBetween(start, end, null, '[]')) {
array[j].push(currentDate.format('MM-DD'));
}
else {
array[j].push('');
}
added++;
}
document.getElementById('output').innerText = JSON.stringify(array);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
<p id="output"></p>