按日期过滤的正确方法是什么

时间:2019-03-25 01:17:06

标签: javascript datetime filter

我有一个对象数组,其日期字符串的格式为private void Form1_Load(object sender, EventArgs e) { string lines, studentNumber, studentMark; StreamReader inputFile; inputFile = File.OpenText("COM122.csv"); while (!inputFile.EndOfStream) { lines = inputFile.ReadLine(); studentInfo = lines.Split(',').ToList(); studentNumber = studentInfo[0]; studentMark = studentInfo[1]; lstMarks.Items.Add(studentNumber + " : " + studentMark); } inputFile.Close(); }

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

我当时想只是在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]
  }
}

类似的事情

1 个答案:

答案 0 :(得分:3)

将字符串转换为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' ]