首页 > 解决方案 > 按日期过滤的正确方法是什么

问题描述

我有一个对象数组,其日期字符串格式如下2019-03-22T13:36:18.333Z

我很好奇最好的做法是按过去一天、过去一周、过去一个月和过去一年对这些进行排序。

我正在考虑只是在那个T时候分裂,然后在-

我也在考虑将日期放入 Date 对象并以这种方式计算出来。

什么是最有活力的?最有效率?等等

const dates = [
  {created_at: '2019-03-22T13:36:18.333Z'}
  {created_at: '2019-05-22T13:36:18.333Z'}
  {created_at: '2019-03-23T13:36:18.333Z'}
  {created_at: '2019-03-24T13:36:18.333Z'}
  {created_at: '2019-01-22T13:36:18.333Z'}
]
const spliteDate = (date, splitBy) => {
  if(splitBy = 'day'){
    return date.split("T")[0].split("-")[1]
  } else if(splitBy = 'month') {
    return date.split("T")[0].split("-")[2]
  } else if(splitBy = 'year') {
    return date.split("T")[0].split("-")[0]
  }
}
dates.filter(date => {
  return splitDate(date, 'month') === Date.now().getMonth()
}

沿着这些思路

标签: javascriptdatetimefilter

解决方案


将字符串转换为 Date 对象可能是最简单的

例如,您有一个字符串格式的日期数组:

const arr = ['2019-03-22T13:36:18.333Z', '2019-03-28T16:36:18.333Z', '2015-05-21T16:36:18.333Z'];

看看你的问题,如果你想在某个日期过滤它,这样做肯定会更短更有效:

const filterByDate = dateFilter => arr.filter(date => new Date(date).getDate() < dateFilter);

filterByDate(25);
// result [ '2019-03-22T13:36:18.333Z', '2019-05-21T16:36:18.333Z' ]

而且,如果您需要多个过滤器,例如按日期和年份过滤,

const filterByDateAndYear = (dateFilter, yearFilter) => arr.filter(date => (new Date(date).getDate() < dateFilter) && (new Date(date).getFullYear() < yearFilter));

filterByDateAndYear(25, 2018);

//result [ '2015-05-21T16:36:18.333Z' ]

推荐阅读