【问题标题】:How can I create a function which will take a date and return schedules based on time condition如何创建一个函数,该函数将根据时间条件获取日期并返回时间表
【发布时间】:2022-01-25 05:56:20
【问题描述】:

这是我的数据库结构:

[
    {
        "schedule_time": "2021-05-17 12:39:29",
        "slot": "L",
        "item_date": "2021-05-18"
    },
    {
        "schedule_time": "2021-05-17 12:47:53",
        "slot": "D",
        "item_date": "2021-05-18"
    },
    {
        "schedule_time": "2021-05-18 13:55:22",
        "slot": "D",
        "item_date": "2021-05-19"
    },
    {
        "schedule_time": "2021-05-19 16:09:15",
        "slot": "L",
        "item_date": "2021-05-20"
    },
    {
        "schedule_time": "2021-05-19 16:11:55",
        "slot": "L",
        "item_date": "2021-05-20"
    },

我想创建一个函数,该函数将采用 item_date,它会显示上午 9 点到 12 点之间的日程安排。前几天的上午 12 点至下午 3 点、下午 3 点至下午 6 点、下午 6 点至晚上 9 点。如果您查看数据库,item_date 和 schedule_date 是不一样的。这就是为什么我希望将前一天的日程安排在一个数组中。

我创建了一个函数,它只返回上午 9 点到 12 点的数据。我希望将时间表放在一个数组中。

  function schedulesList (date){
        let dbItemDate = date;
        let otherDayArray = schedules.filter(num => num.item_date !== dbItemDate); // not equal because I want other dates schedules not the exact date
        let times = otherDayArray?.filter(num => num.schedule_time.split(' ')[1] >= '12:00:00' && num.schedule_time.split(' ')[1] <= '14:00:00');
        console.log('9am to 12pm', times.length, 'schedules') //
    }

预期的结果应该是这样的:

[
'9am to 12pm' : 2,
'12pm to 3pm' : 0,
'3pm to 6pm' : 1,
'6pm to 9pm' : 3,
]

【问题讨论】:

  • 请提供预期结果
  • 预期结果应该是这样或类似的:[ '9am to 12pm' : 2, '12pm to 3pm' : 0, '3pm to 6pm' : 1, '6pm to 9pm' : 3, ]
  • 请包含所有相关代码和minimal, complete, and reproducible code example,表明您首先尝试自己执行此操作。

标签: javascript arrays reactjs object filter


【解决方案1】:

假设您已将给定的输入数组存储在名为 data 的变量中。

let data = [{
    "schedule_time": "2021-05-17 12:39:29",
    "slot": "L",
    "item_date": "2021-05-18"
  },
  {
    "schedule_time": "2021-05-17 12:47:53",
    "slot": "D",
    "item_date": "2021-05-18"
  },
  {
    "schedule_time": "2021-05-18 13:55:22",
    "slot": "D",
    "item_date": "2021-05-19"
  },
  {
    "schedule_time": "2021-05-19 16:09:15",
    "slot": "L",
    "item_date": "2021-05-21"
  },
  {
    "schedule_time": "2021-05-19 16:11:55",
    "slot": "L",
    "item_date": "2021-05-20"
  }
];

//function to get the final results
let getScheduleCounter = (date) => {
  let scheduleCounter = {
    '9_12': [],
    '12_3': [],
    '3_6': [],
    '6_9': []
  };

  data.forEach(sch => {
    if (sch.item_date !== date) {
      updateScheduledCounter(sch, scheduleCounter);
    }
  });

  return scheduleCounter;
}

//function to get the count and update in scheduleCounter
let updateScheduledCounter = (sch, scheduleCounter) => {
  let time = sch.schedule_time.split(' ')[1];
  switch (!!time) {
    case (time <= '12:00:00'):
      scheduleCounter['9_12']++;
      break;

    case (time >= '12:00:00' && time <= '15:00:00'):
      scheduleCounter['12_3']++;
      break;

    case (time >= '15:00:00' && time <= '18:00:00'):
      scheduleCounter['3_6']++;
      break;

    case (time >= '18:00:00' && time <= '21:00:00'):
      scheduleCounter['6_9']++;
      break;
  }
}

let schedules = getScheduleCounter("2021-05-20");
console.log('schedules: ', schedules);

【讨论】:

    【解决方案2】:

    我建议以下解决方法

    const schedules = [
    {"schedule_time": "2021-05-17 12:39:29","slot": "L","item_date": "2021-05-18"},
    {"schedule_time": "2021-05-17 12:47:53","slot": "D","item_date": "2021-05-18"},
    {"schedule_time": "2021-05-18 13:55:22","slot": "D","item_date": "2021-05-19"},
    {"schedule_time": "2021-05-19 16:09:15","slot": "L","item_date": "2021-05-20"},
    {"schedule_time": "2021-05-19 16:11:55","slot": "L","item_date": "2021-05-20"}];
    
    const hours = [
    {hoursName: '9am to 12pm', from: 9, to: 12},
    {hoursName: '12pm to 3pm', from: 12, to: 15},
    {hoursName: '3pm to 6pm', from: 15, to: 18},
    {hoursName: '6pm to 9pm', from: 18, to: 21}];
    
    const targetDate = new Date("2021-05-20");
    
    const previousItems = schedules.filter(({ schedule_time }) => {
      const scheduleTime = new Date(schedule_time);
      return scheduleTime < targetDate;
    });
    
    const result = previousItems.reduce((acc, { schedule_time }) => {
      const scheduleTime = new Date(schedule_time);
      const targetHour = scheduleTime.getHours();
      const { hoursName } = hours.find(({ from, to }) => (targetHour >= from) && (targetHour < to));
      acc[hoursName] = (acc[hoursName] ?? 0) + 1;
      return acc;
    }, {});
    
    console.log(result);
    .as-console-wrapper{min-height: 100%!important; top: 0}

    【讨论】:

      猜你喜欢
      • 2019-11-06
      • 2022-11-29
      • 1970-01-01
      • 1970-01-01
      • 2011-01-01
      • 2019-10-27
      • 1970-01-01
      • 2016-10-02
      • 2021-08-06
      相关资源
      最近更新 更多