【问题标题】:How to know if an event lasts multiple months如何知道一个事件是否持续数月
【发布时间】:2018-05-13 21:58:53
【问题描述】:

应用概览

我正在用 Swift 构建一个显示事件列表的 iOS 应用程序。我拥有的事件数据显示了事件的名称、开始日期(日、月、年)和结束日期(日、月、年)。

从 Firebase 提取数据后,我会查看开始和结束月份,并在表格视图中显示相应月份的事件。数据按月份显示,因此查看 5 月的用户只能看到 5 月的事件,并且必须选择不同的月份才能查看该月的事件。

问题

有些事件会持续几个月。例如,如果某个事件在 7 月开始并在 9 月结束,那么我当前的实现不会显示 8 月期间的事件。

可能的解决方案

我正在寻找一种优雅的方式来以编程方式检查这种情况,并确保它显示在正确的月份,而不是手动操作数据来说明中间的月份。

如果您有任何建议,请告诉我。这是我正在考虑的解决方案:

  1. 添加一个布尔数据点,说明事件是否持续数月。当显示特定月份的事件时,检查所有这些事件以查看所选月份是否大于事件的开始月份且小于事件的结束月份。

如果事件从一年持续到下一年,这将失效。我需要添加额外的逻辑来处理它。

【问题讨论】:

    标签: ios swift


    【解决方案1】:

    听起来您只是将显示的月份与事件的开始月份和结束月份进行比较。

    没有任何细节,您确定是否在显示月份中显示事件的基本逻辑是查看显示的月份是否大于或等于事件开始月份并且小于或等于偶数结束月份。

    在本质上是这样的伪代码中:

    if displayMonth >= event.startMonth && displayMonth <= event.endMonth {
        // show event
    }
    

    当然,这也需要考虑年份。

    【讨论】:

      【解决方案2】:

      除了检查月份,您还需要检查年份。例如:

      // Check start date
      if (displayYear == event.startYear && displayMonth >= event.startMonth) || displayYear > event.startYear {
          // Check end date
          if (displayYear == event.endYear && displayMonth <= event.endMonth) || displayYear < event.endYear {
              // show event
          }
      }
      

      如果您需要此代码的更多信息或说明,请告诉我

      【讨论】:

        【解决方案3】:

        比较日期对你有用。

        比较当前日期与开始日期和结束日期。

        当前日期应大于开始日期且小于结束日期。

        这是日期比较的代码片段

        如果 currentDate.compare(startingDate) == .OrderedAscending && currentDate.compare(endingDate) == 。有序降序{

        //这里会出现你的事件代码。

        }

        【讨论】:

          猜你喜欢
          • 2019-05-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-03-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多