【问题标题】:How can I determine if the current date is within/outside a range of two dates that don't include a year?如何确定当前日期是否在不包括年份的两个日期范围之内/之外?
【发布时间】:2014-10-27 19:54:34
【问题描述】:

所以我有一个对象(活动),允许用户在其中选择活动的开始日期和到期日期。

用户基本上是一个为公众提供活动的中心/中心。

他们可以选择让这些活动成为季节性活动。例如,一个活动可以从 2 月 1 日到 6 月 22 日进行。我使用当前日期和一堆代码来确定该活动是否在季节。

例如,我检查当前日期 271014 是否大于开始日期 020114 并且小于到期日期 062214。如果是,则表示日期在范围内。

问题:

我不得不进行更改,所以现在用户必须只选择月份和日期。这很好,直到他们选择像 11 月 1 日到 2 月 28 日这样的时间。 这些日期的格式为 1101 和 2802。

如果没有年份,这显然会给我带来不同的结果。有了这一年,我就可以确定 2 月 28 日的到期日是开始日期之后的一年,而不是同一年。然后,当确定当前日期是否在开始日期和到期日期内时,我会得到预期的结果。没有年份,到期日期现在实际上不大于开始日期,即使它应该是。

我目前在做什么

我该如何解决这个问题?我真正需要的是允许用户设置开始日期和到期日。仅当当前日期在范围内时,活动才会显示在表格视图中。

如果仅选择了到期日期,则活动将保持活动状态,直到达到该到期日期。即使我设定和到期日期为 2 月 28 日,而我们是在 11 月。同样的需求也适用于开始日期。

希望能在这里提供一些见解。

感谢您的宝贵时间。

【问题讨论】:

  • 如果你把月份放在第一位(正如我在回答你之前的问题 stackoverflow.com/a/26451356/1187415 中建议的那样),那么你有 start="1101" 和 expiry="0228",这很容易检测到有效期是在下一年。
  • 我目前把月份放在首位,遇到了上面提到的问题。然后我决定也切换到包括年份,但现在我只能使用月份和日期。我很难想出在没有一年的情况下检测明年的逻辑。今天是 1027,所以假设我们想使用上面的开始日期和到期日期。下个月(比如 1102)将大于 1101 但也大于 0228,这意味着它不会在开始和结束日期的范围内。这是我的问题。
  • 有什么理由不能用各种分隔符分隔 m/d 并将它们存储在数组中?您最终会得到@[@(11), @(02)],并且您会知道第一个对象是日期,而第二个对象是月份。

标签: objective-c swift nsdate nsdateformatter nscalendar


【解决方案1】:

这是我的建议(在伪代码中):将所有日期转换为格式为“MMdd”的字符串,在 你的榜样

startDate   = "1101"  // November 1
expiryDate  = "0228"  // February 28
currentDate = "1027"  // October 27

如果startDate <= expiryDate 则范围在同一年内,您可以查看 当前日期与

if (startDate <= currentDate && currentDate <= expiryDate) ...

否则范围从一年开始,到下一年结束,你检查

if (currentDate >= startDate || currentDate <= expiryDate) ...

【讨论】:

  • 感谢您试一试并报告。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-22
  • 2022-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-25
相关资源
最近更新 更多