首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >给定日期数组,在“周”范围内显示结果。

给定日期数组,在“周”范围内显示结果。
EN

Stack Overflow用户
提问于 2019-12-24 06:19:18
回答 5查看 91关注 0票数 2

我需要显示“一周”范围内的日期列表。例如,给定一个日期数组:

代码语言:javascript
运行
复制
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周:

  • 2019-11-15
  • 2019-11-13
  • 2019-11-12

11/3-11/9周:

  • 2019-11-09
  • 2019-11-05
  • 2019-11-03

10/27-11/2周:

  • 2019-10-31
  • 2019-10-28

我正在努力接近如何为每周生成合适的范围(太阳-卫星)。范围需要限制在数组中所有日期的范围内;也就是说,在给定日期列表所需的范围之前或之后,没有空的“一周”范围。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2019-12-24 07:26:00

使用普通JS:

代码语言:javascript
运行
复制
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)

使用moment.js - startOf,endOf

代码语言:javascript
运行
复制
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)
代码语言:javascript
运行
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>

票数 1
EN

Stack Overflow用户

发布于 2019-12-24 06:41:47

使用startOfendOf

代码语言:javascript
运行
复制
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)
代码语言:javascript
运行
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>

票数 1
EN

Stack Overflow用户

发布于 2019-12-24 06:57:30

代码语言:javascript
运行
复制
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)
代码语言:javascript
运行
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.20.1/moment.min.js"></script>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59464622

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档