【问题标题】:Javascript group object of dates by weeksJavascript 按周分组日期对象
【发布时间】:2021-08-02 16:56:47
【问题描述】:

我有这样的数据:

[
    {
        "time": "2021-07-28T18:16:23.994Z"
    },
    {
        "time": "2021-07-29T18:16:23.994Z"
    },
    {
        "time": "2021-08-01T15:01:40.267Z"
    },
    {
        "time": "2021-08-02T15:01:40.267Z"
    },
    {
        "time": "2020-06-09T15:01:40.267Z"
    }
]

我需要一个返回如下内容的方法:

{
    "2020": { // year
        "07/06-13/06": { // dates of the week
            "Tue": "2020-06-09T15:01:40.267Z" // day name at key
        }
    },
    "2021": {
        "25/07-31/07": {
            "Wed": "2021-07-28T18:16:23.994Z",
            "Thu": "2021-07-29T18:16:23.994Z"
        },
        "01/08-07/08": {
            "Sun": "2021-08-01T15:01:40.267Z",
            "Mon": "2021-08-02T15:01:40.267Z"
        }
    }
}

我尝试使用 momentjs 和 lodash/groupby 执行此操作,但没有成功..
提前致谢!

【问题讨论】:

  • 你说你用 lodash 试过,贴出你试过的代码
  • 向我们展示您迄今为止所做的一些努力

标签: javascript node.js date


【解决方案1】:

有点难看,但有效:

const datesArray = [
  {
    "time": "2021-07-28T18:16:23.994Z"
  },
  {
    "time": "2021-07-29T18:16:23.994Z"
  },
  {
    "time": "2021-08-01T15:01:40.267Z"
  },
  {
    "time": "2021-08-02T15:01:40.267Z"
  },
  {
    "time": "2020-06-09T15:01:40.267Z"
  }
]

function getWeeksRange(date) {
  const curr = new Date(date.time);
  const first = curr.getDate() - curr.getDay();
  const last = first + 6;
  const format = { year: 'numeric', month: '2-digit', day: '2-digit' };
  var firstday = new Date(curr.setDate(first)).toLocaleDateString("he-IL", format);
  var lastday = new Date(curr.setDate(last)).toLocaleDateString("he-IL", format);
  ;
  return `${firstday.slice(0, 5).replaceAll('.', '/')}-${lastday.slice(0, 5).replaceAll('.', '/')}`
}

function groupDatesByWeek(dates) {

  const groupedDates = {}

  dates.forEach(date => {
    const range = getWeeksRange(date);
    const dayName = new Date(date.time).toString().split(' ')[0]
    if (!groupedDates[date.time.split('-')[0]]) {
      groupedDates[date.time.split('-')[0]] = {};
      groupedDates[date.time.split('-')[0]][range] = {};
    } else if (!groupedDates[date.time.split('-')[0]][range]) {
      groupedDates[date.time.split('-')[0]][range] = {};
    }
    groupedDates[date.time.split('-')[0]][range][dayName] = date.time;
  })

 return groupedDates;
}
console.log(groupDatesByWeek(datesArray))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-06
    • 1970-01-01
    • 2023-03-25
    • 2012-01-23
    • 2010-10-29
    • 2023-03-09
    • 2018-01-09
    • 1970-01-01
    相关资源
    最近更新 更多