【问题标题】:Filtering dates with return boolean使用返回布尔值过滤日期
【发布时间】:2020-07-15 15:29:40
【问题描述】:

我为过滤日期编写了一些代码。 在这里,我尝试使用 return boolean 制作一个过滤器,但此代码仅适用于“项​​目”的一个对象,而 我需要过滤整个对象才能显示给目前只有网站的工作时间表有人要求优化我编写的代码。

<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
item = {
           "work_schedule": {
                "schedule": {
                    "MONDAY": {
                        "begin": "10:00",
                        "finish": "22:00"
                    },
                    "TUESDAY": {
                        "begin": "10:00",
                        "finish": "22:00"
                    },
                    "WEDNESDAY": {
                        "begin": "10:00",
                        "finish": "22:00"
                    },
                    "THURSDAY": {
                        "begin": "10:00",
                        "finish": "22:00"
                    },
                    "FRIDAY": {
                        "begin": "10:00",
                        "finish": "22:00"
                    }
                }
            },
          "work_schedule": {
                "schedule": {
                    "MONDAY": {
                        "begin": "10:00",
                        "finish": "22:00"
                    },
                    "TUESDAY": {
                        "begin": "10:00",
                        "finish": "22:00"
                    },
                    "WEDNESDAY": {
                        "begin": "10:00",
                        "finish": "22:00"
                    },
                    "THURSDAY": {
                        "begin": "10:00",
                        "finish": "22:00"
                    },
                    "FRIDAY": {
                        "begin": "10:00",
                        "finish": "22:00"
                    },
                    "SATURDAY": {
                        "begin": "10:00",
                        "finish": "22:00"
                    },
                    "SUNDAY": {
                        "begin": "10:00",
                        "finish": "22:00"
                    }
                }
            },
             "work_schedule": {
                "schedule": {
                    "MONDAY": {
                        "begin": "08:00",
                        "finish": "17:00"
                    },
                    "TUESDAY": {
                        "begin": "08:00",
                        "finish": "17:00"
                    },
                    "WEDNESDAY": {
                        "begin": "08:00",
                        "finish": "17:00"
                    },
                    "THURSDAY": {
                        "begin": "08:00",
                        "finish": "17:00"
                    },
                    "FRIDAY": {
                        "begin": "08:00",
                        "finish": "17:00"
                    }
                }
            },
}
 
 const checkWorkDay = () => {
    if (item?.work_schedule?.schedule) {
      const dayOnWork = Object.keys(item?.work_schedule?.schedule).filter(
        (el, index) => index == new Date().getDay() - 1
      ) // here I tried to filter one part of object I mean item. work_schedule.schedule

      let time = null

      switch (dayOnWork[0]) {
        case 'MONDAY': {
          time = item?.work_schedule?.schedule?.MONDAY
          break
        }
        case 'TUESDAY': {
          time = item?.work_schedule?.schedule?.TUESDAY
          break
        }
        case 'WEDNESDAY': {
          time = item?.work_schedule?.schedule?.WEDNESDAY
          break
        }
        case 'THURSDAY': {
          time = item?.work_schedule?.schedule?.THURSDAY
          break
        }
        case 'FRIDAY': {
          time = item?.work_schedule?.schedule?.FRIDAY
          break
        }
        case 'SATURDAY': {
          time = item?.work_schedule?.schedule?.SATURDAY
          break
        }
        case 'SUNDAY': {
          time = item?.work_schedule?.schedule?.SUNDAY
          break
        }
        default: {
          break
        }
      }
      let beginTime = time?.begin.split(':')
      let finishTime = time?.finish.split(':')

      if (beginTime !== null && finishTime !== null) {
        return (
          beginTime[0] <= new Date().getHours() &&
          finishTime[0] >= new Date().getHours()
        )
      }
    }
  }

【问题讨论】:

    标签: javascript reactjs date filter


    【解决方案1】:

    这是这个问题的解决方案 首先,我们创建工作日数组以检查今天的工作日。 其次,我们使用 func 过滤器来制作数组并使用破坏来获得时间表。 第三,我们检查数组中是否有今天的工作日,如果没有则返回false。最后,我们在 schedule weekday 中再次转换为数组 begin 和 finish 并拆分它,比较今天的工作时间是否太早或者是打开时间还是关闭时间

    const filtByWeekOpened = (items) => {
        const days = [
          'SUNDAY',
          'MONDAY',
          'TUESDAY',
          'WEDNESDAY',
          'THURSDAY',
          'FRIDAY',
          'SATURDAY'
        ]
    
        const date = new Date()
        const today = days[date.getDay()]
        const time = date.getHours()
    
        return items.filter(({ work_schedule: { schedule } }, idx) => {
          if (!schedule.hasOwnProperty(today)) return false
          return (
            Number(schedule[today].begin.split(':')[0]) <=
            time <=
            Number(schedule[today].finish.split(':')[0])
          )
        })
      }
      
    
    
    
      <script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>

    【讨论】:

      猜你喜欢
      • 2017-09-06
      • 2020-08-05
      • 1970-01-01
      • 2021-10-21
      • 2013-08-18
      • 2021-11-27
      • 1970-01-01
      • 1970-01-01
      • 2011-12-14
      相关资源
      最近更新 更多