获取日期范围

时间:2021-05-22 21:28:48

标签: javascript

我有一个对象数组 -

[
{ name:'abc',
  lRange: '2020-01-01',
  hRange: '2020-01-22',
},

{ name:'abc',
  lRange: '2020-01-01',
  hRange: '2020-01-22',
},
{ name:'def',
  lRange: '2020-01-15',
  hRange: '2020-01-30',
},
{ name:'ghi',
  lRange: '2020-02-10',
  hRange: '2020-02-22',
}
]

我需要获得最小日期和最大日期范围,结合所有日期 lRange 和 hRange 日期 - 日期也会重叠。

我试过按日期时间排序,但这并没有给我正确的范围。有什么想法吗?

3 个答案:

答案 0 :(得分:1)

这是一种方法,尽管我怀疑还有更优雅的方法。它将每个字符串日期转换为日期对象并进行比较。最后,它取最小值和最大值并将它们转换回可读的字符串。

let dates = [{
    name: 'abc',
    lRange: '2019-02-01',
    hRange: '2020-01-22',
  },

  {
    name: 'abc',
    lRange: '2020-01-01',
    hRange: '2020-01-22',
  },
  {
    name: 'def',
    lRange: '2020-01-15',
    hRange: '2020-01-30',
  },
  {
    name: 'ghi',
    lRange: '2020-02-10',
    hRange: '2020-02-22',
  }
]

let output = {}

dates.forEach(obj => {
  if (!output.min) {
    output.min = new Date(obj.lRange);
    output.max = new Date(obj.hRange);
  } else {
    output.min = Math.min(output.min, new Date(obj.lRange))

    output.max = Math.max(output.max, new Date(obj.hRange))

  }

})
//convert back to date strings
 output.min =  new Date(output.min).toISOString().split("T")[0]
 output.max =  new Date(output.max).toISOString().split("T")[0]

 console.log(output)

答案 1 :(得分:1)

您可以使用 flatMap 获取所有日期,然后对其进行排序。排序后第一个元素(即索引 0 处的元素)为 minRange,最后一个索引处的元素为 maxRange。

const arr = [
  { name: "abc", lRange: "2020-01-01", hRange: "2020-01-22" },
  { name: "abc", lRange: "2020-01-01", hRange: "2020-01-22" },
  { name: "def", lRange: "2020-01-15", hRange: "2020-01-30" },
  { name: "ghi", lRange: "2020-02-10", hRange: "2020-02-22" },
];

const sortedResult = arr
  .flatMap((obj) => [obj.lRange, obj.hRange])
  .sort((a, b) => new Date(a) - new Date(b));

const result = {
  min: sortedResult[0],
  max: sortedResult[sortedResult.length - 1],
};

console.log(result);

答案 2 :(得分:0)

如果方便的话,您可以将 lRagnes 和 hRanges 提取到单独的数组中。

var lDates = [];
var hDates = [];

yourArray.map((innerObjects) => {
    lDates .push(innerObjects.lRange);
    hDates .push(innerObjects.hRange);
});
相关问题