【问题标题】:Javascript: Get object with date range in array which matches to the current timeJavascript:获取与当前时间匹配的数组中日期范围的对象
【发布时间】:2020-10-22 15:15:02
【问题描述】:

如果这个问题已经在 Stack 上提出过,请纠正我,但我还没有找到任何可以解决我的问题的答案。我只想显示我的数组的对象,其中包含timeStarttimeEnd 的日期范围与当前时间匹配。假设当前时间为2020-10-22T16:35:45+01:00,该函数应显示Steve(参见下面给出的示例)它的约会。 如何搜索当前时间在给定日期范围之间的对象?

const currentTime = Date.now(); // 2020-10-22T16:35:45+01:00

这是我正在使用的数组:

[
    {
        name: "Thomas",
        timeStart: "2020-10-22T16:00:00+0100",
        timeEnd: "2020-10-22T16:15:00+01:00"
    },
    {
        name: "Marc",
        timeStart: "2020-10-22T16:15:00+0100",
        timeEnd: "2020-10-22T16:30:00+01:00"
    },
    {
        name: "Steve",
        timeStart: "2020-10-22T16:30:00+0100",
        timeEnd: "2020-10-22T16:45:00+01:00"
    }
]

【问题讨论】:

    标签: javascript arrays date


    【解决方案1】:

    比较 find 循环中的开始日期、结束日期和当前日期。
    如果比较返回 true 则返回当前对象,否则返回 undefined

    const now = new Date("2020-10-22T16:17:00+01:00"); // 16:17. Should be Marc.
    
    const dates = [
        {
            name: "Thomas",
            timeStart: "2020-10-22T16:00:00+0100",
            timeEnd: "2020-10-22T16:15:00+01:00"
        },
        {
            name: "Marc",
            timeStart: "2020-10-22T16:15:00+0100",
            timeEnd: "2020-10-22T16:30:00+01:00"
        },
        {
            name: "Steve",
            timeStart: "2020-10-22T16:30:00+0100",
            timeEnd: "2020-10-22T16:45:00+01:00"
        }
    ];
    
    const result = dates.find(({ timeStart, timeEnd }) => {
      const start = new Date(timeStart);
      const end = new Date(timeEnd);
      return start <= now && end > now;
    });
    
    console.log(result);

    【讨论】:

      【解决方案2】:

      这对你有用吗?它搜索每个日期并确保当前日期在开始和结束之间。

      const currentTime = Date.now(); // 2020-10-22T16:35:45+01:00
      
      const dates = [{
          name: "Thomas",
          timeStart: "2020-10-22T16:00:00+0100",
          timeEnd: "2020-10-22T16:15:00+01:00"
        },
        {
          name: "Marc",
          timeStart: "2020-10-22T16:15:00+0100",
          timeEnd: "2020-10-22T16:30:00+01:00"
        },
        {
          name: "Steve",
          timeStart: "2020-10-22T16:30:00+0100",
          timeEnd: "2020-10-22T16:45:00+01:00"
        }
      ];
      
      // If you want only one result, use find instead of filter
      const validDates = dates.filter((obj) => {
        // Converts strings to Dates
        let startDate = new Date(obj.timeStart);
        let endDate = new Date(obj.timeEnd);
        // Makes sure the current time is after the start date and before the end date
        return currentTime >= startDate && currentTime <= endDate;
      });
      
      console.log(validDates);
      
      // To get name, use validDates[0].name (for filter, see above) or validDates.name (for find)

      【讨论】:

        【解决方案3】:

        会是这样的:

        const currentTime = Date.now();
        
        const resultArray=yourArray.filter(item=>{
              // you have to format dates to be able to compare them
              return item.timeStart < currentTime && item.timeEnd > currentTime
              });
        

        【讨论】:

          【解决方案4】:

          试试这样 yourArray.filter(item => currentTime >= item.timeStart && 当前时间

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-04-20
            • 2018-04-08
            • 2021-12-03
            • 2016-10-18
            • 2017-05-26
            • 1970-01-01
            相关资源
            最近更新 更多