【问题标题】:Check if the current date string is within or outside the range of two other dates检查当前日期字符串是否在其他两个日期的范围内或之外
【发布时间】:2014-10-19 13:56:59
【问题描述】:

我有 2 个日期选择器。一个用于选择开始日期,另一个用于选择到期日期。做出选择后,我将日期转换为字符串格式并将结果存储在两个文本字段中。

这是我保存到数据库的方式:

let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "MMMM d" // e.g. September 15
let sDate = dateFormatter.dateFromString(startDateField.text) as NSDate! 
let eDate = dateFormatter.dateFromString(expiryDateField.text) as NSDate!

activity["startDate"] = sDate
activity["expiryDate"] = eDate

activity.saveInBackgroundWithBlock({ (success: Bool, error: NSError!) -> Void in

我打算做的是有一个表格视图显示 2 个部分:一个显示活动的活动,另一个显示过期/不在日期范围内的活动。

我想我可以通过获取当前日期并检查它是否在开始日期和到期日期范围内来做到这一点。

我从上面保存的日期在解析中显示如下:

问题是,我不想考虑年份或时间。唯一重要的是月份和日期。例如,一个活动可以在每年的 9 月 15 日到 12 月 20 日之间运行一次。

我需要一种方法来检查当前日期是否在这两个日期之内,并考虑当月的某一天(例如 15 日)。因此,今天的日期是 10 月 19 日,如果活动的开始日期是 9 月 15 日并且到期日期是 12 月 20 日,则该活动将在范围内,但如果到期日期是 10 月 18 日或开始日期是 10 月 25 日,则活动将超出范围/操作。

总结一下:

我将在表格视图中显示两个部分。一个有活跃的活动,另一个有非活跃的停业活动。

  1. 如何获取我存储的开始日期和到期日期并轻松检查当前日期是否在其范围内?

  2. 对于用户选择开始日期或到期日期的情况,我需要检查当前日期是否大于/小于开始日期(以便能够决定是否应该显示活动)或者当前日期是否大于/小于到期日期(能够决定活动是否已超过其到期日期。

如果我可以将 1 和 2 合并到一个函数中并在表格视图中使用它,那就太好了。

有兴趣了解更有经验的程序员如何实现这一目标。

【问题讨论】:

  • 一种方法是使用NSDateComponents

标签: cocoa-touch date swift nsdate date-formatting


【解决方案1】:

除了日期格式“MMMM d”(例如“September 15”),您可以转换日期 到日期格式为“MMdd”的字符串(例如“0915”)。然后你可以做一个简单的 当前日期、开始日期和到期日期之间的字符串比较。

例如,

"0915" < "1019" < "1220"

所以 10 月 19 日的范围是从 9 月 15 日到 12 月 20 日。

【讨论】:

  • 我将在表格 cellForRowAtIndexPath 中尝试一下,我可以访问存储的日期对象并返回报告。
  • 这对我来说有点用,但我对数据库中的日期有疑问。例如,活动的开始日期存储为 2000 年 10 月 21 日 00:00,但是当我将其打印回来时,它显示为 1022 而不是 1021。我只比较字符串,例如“1022”等,所以这有点令人困惑。
  • 也许我应该在数据库中存储为字符串“MMdd”,但我想存储为完整日期,以便在其他地方处理相同日期字段时更加灵活。
  • 如何在数据库中存储日期?作为 strings 或作为 dates?
  • 作为日期。正是上图中显示的方式。我正在考虑直接存储为“DDmm”字符串,但这不会限制我之后对日期的处理吗?存储为日期意味着我可以以多种不同的方式使用该日期对象,还是我错了?
猜你喜欢
  • 2012-08-25
  • 2021-12-02
  • 1970-01-01
  • 1970-01-01
  • 2015-02-13
  • 1970-01-01
  • 1970-01-01
  • 2017-01-28
  • 1970-01-01
相关资源
最近更新 更多