【问题标题】:Select next object based on Date根据日期选择下一个对象
【发布时间】:2020-10-23 10:48:51
【问题描述】:

我正在尝试循环遍历一个数组并按时间顺序拉出最近/下一个会议对象。

每个对象都有一个开始结束时间,但我想知道当前事件或将要发生的下一个事件是什么。未能获得最后一个事件。

例如

const meetings = [{title:"morning",startAt:new Date("2020-10-14 7:00"),
                                     endAt:new Date("2020-10-14 8:00")},
                 {title:"evening",startAt:new Date("2020-10-14 20:00"),
                                    endAt:new Date("2020-10-14 21:00")},
                 {title:"afternoon",startAt:new Date("2020-10-14 15:00"),
                                    endAt:new Date("2020-10-14 15:12")}]
// results:
"2020-10-14 01:00" // morning
"2020-10-14 07:30" // morning
"2020-10-14 08:01" // afternoon
"2020-10-14 15:00" // afternoon
"2020-10-14 15:12" // afternoon
"2020-10-14 15:13" // evening
"2020-10-14 21:00" // evening
"2020-10-14 23:59" // evening

这是我目前所拥有的:


const targetDate = new Date("2020-10-14 15:12")

meetings.reduce((found,meeting)=>{
           if( ! found){
                return meeting
           } else if( meeting.startAt > targetDate
                   &&( found.startAt < targetDate
                   ||  meeting.startAt < found.startAt)){
                 return meeting
           }
           return found
      },{}))

【问题讨论】:

    标签: javascript date sorting datetime time


    【解决方案1】:

    试试这个功能getMeeting(meetings,targetDate)

    您可以将会议集 + 目标日期/默认值传递到现在

    const testSet = [
                    [new Date("2020-10-14 01:00"),"morning"],
                    [new Date("2020-10-14 07:30"),"morning"],
                    [new Date("2020-10-14 08:01"),"afternoon"],
                    [new Date("2020-10-14 15:00"),"afternoon"],
                    [new Date("2020-10-14 15:12"),"afternoon"],
                    [new Date("2020-10-14 15:13"),"evening"],
                    [new Date("2020-10-14 21:00"),"night"],
                    [new Date("2020-10-14 23:59"),"night"],
                  ]
                  
        const meetings = [
          { title: "morning", startAt: new Date("2020-10-14 7:00"), endAt: new Date("2020-10-14 8:00") },
          { title: "evening", startAt: new Date("2020-10-14 20:00"), endAt: new Date("2020-10-14 20:59") },
          { title: "afternoon", startAt: new Date("2020-10-14 15:00"), endAt: new Date("2020-10-14 15:12") },
          { title: "night",  startAt: new Date("2020-10-14 21:00"),  endAt: new Date("2020-10-14 23:15") },
        ];
    
        
    function getMeeting(meetings, targetDate = new Date()){
    
    return meetings.sort((a,b)=>b.startAt - a.startAt)
                                .reduce((closest, meeting) => {
         
            if ( ! closest) {
              closest = meeting;
            } else if (closest.startAt <= targetDate 
                   &&  closest.endAt >= targetDate) {
              // KEEP closest
            } else if (meeting.startAt <= targetDate 
                   &&  meeting.endAt >= targetDate) {
              closest = meeting;
            } else if (meeting.startAt <= targetDate 
                   &&  closest.startAt <= meeting.startAt) {
              closest = meeting;
            } else if (meeting.endAt >= targetDate 
                   &&  closest.endAt >= meeting.endAt) {
              closest = meeting;
            }
          
          return closest;
        }, null);
    }
    
    testSet.forEach(([date,name])=>{
        console.log(name === getMeeting(meetings,date).title ? "✔" : "✘", date)
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-25
      • 1970-01-01
      • 2019-06-30
      • 2021-10-03
      相关资源
      最近更新 更多