我需要显示“一周”范围内的日期列表。例如,给定一个日期数组:
const dates = [
'2019-11-15',
'2019-11-13',
'2019-11-12',
'2019-11-09',
'2019-11-05',
'2019-11-03',
'2019-10-31',
'2019-10-28'
];
我需要输出:
11/10-11/16周:
11/3-11/9周:
10/27-11/2周:
我正在努力接近如何为每周生成合适的范围(太阳-卫星)。范围需要限制在数组中所有日期的范围内;也就是说,在给定日期列表所需的范围之前或之后,没有空的“一周”范围。
发布于 2019-12-24 07:26:00
使用普通JS:
var dates = ['2019-11-15', '2019-11-13', '2019-11-12', '2019-11-09', '2019-11-05', '2019-11-03', '2019-10-31', '2019-10-28'], result = {};
function formatDate(date)
{
var day = "0"+date.getDate(), month = "0"+(date.getMonth()+1);
return [month.slice(-2), day.slice(-2)].join("/");
}
dates.forEach(function(d){
var date = new Date(d), day = date.getDay();
var start = new Date(date.setDate(date.getDate()-day));
var end = new Date(date.setDate(date.getDate()+6));
var range = formatDate(start)+"-"+formatDate(end);
if(!result[range]) result[range] = [];
result[range].push(d);
});
console.log(result)
var dates = ['2019-11-15', '2019-11-13', '2019-11-12', '2019-11-09', '2019-11-05', '2019-11-03', '2019-10-31', '2019-10-28'], result = {};
dates.forEach(function(date){
var m = moment(date, 'YYYY-MM-DD');
var range = m.startOf('week').format('Y/M/D')+'-'+m.endOf('week').format('Y/M/D');
if(!result[range]) result[range] = [];
result[range].push(date);
});
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>
发布于 2019-12-24 06:41:47
var dates = ['2019-11-15', '2019-11-13', '2019-11-12', '2019-11-09', '2019-11-05', '2019-11-03', '2019-10-31', '2019-10-28']
const result = dates.reduce((a, i) => {
let m = moment(i)
let k = m.startOf('week').format('M/D') + '-' + m.endOf('week').format('M/D')
a[k] = (a[k] || []).concat(i)
return a
}, {})
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>
发布于 2019-12-24 06:57:30
const dates = [
'2019-11-15',
'2019-11-13',
'2019-11-12',
'2019-11-09',
'2019-11-05',
'2019-11-03',
'2019-10-31',
'2019-10-28'
];
let gp = {};
for(let i=0; i<dates.length; i++){
let dt = moment(dates[i]);
let week = dt.startOf('week').format('M/D') + '-' + dt.endOf('week').format('M/D');
if(gp[week]){
gp[week].push(dates[i]);
}else{
gp[week] = [dates[i]];
}
}
console.log(gp)
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.20.1/moment.min.js"></script>
https://stackoverflow.com/questions/59464622
复制相似问题