Swift - 检查日期是否在下周/下个月。 ( isDateInNextWeek() isDateInNextMonth() )

2024-05-01

我们在日历中有这些方便的功能:

let calendar = NSCalendar.currentCalendar()
calendar.isDateInToday(date)
calendar.isDateInTomorrow(date)

但我缺少那两个:

  • 日历.isDateInNextWeek(日期)

  • 日历.isDateInNextMonth(日期)

正如@Rob提到的,其含义是:“在日历周中,从下周日开始,一直到下周六”

我很难弄清楚如何以涵盖所有极端情况的稳健方式实现这些功能。

有人可以提供助理吗?


问题解决使用Swift 5并延伸Calendar.

extension Calendar {
  private var currentDate: Date { return Date() }

  func isDateInThisWeek(_ date: Date) -> Bool {
    return isDate(date, equalTo: currentDate, toGranularity: .weekOfYear)
  }

  func isDateInThisMonth(_ date: Date) -> Bool {
    return isDate(date, equalTo: currentDate, toGranularity: .month)
  }

  func isDateInNextWeek(_ date: Date) -> Bool {
    guard let nextWeek = self.date(byAdding: DateComponents(weekOfYear: 1), to: currentDate) else {
      return false
    }
    return isDate(date, equalTo: nextWeek, toGranularity: .weekOfYear)
  }

  func isDateInNextMonth(_ date: Date) -> Bool {
    guard let nextMonth = self.date(byAdding: DateComponents(month: 1), to: currentDate) else {
      return false
    }
    return isDate(date, equalTo: nextMonth, toGranularity: .month)
  }

  func isDateInFollowingMonth(_ date: Date) -> Bool {
    guard let followingMonth = self.date(byAdding: DateComponents(month: 2), to: currentDate) else {
      return false
    }
    return isDate(date, equalTo: followingMonth, toGranularity: .month)
  }
}

Usage:

let day: Double = 60 * 60 * 24
let currentDate = Date() // Thu 25 Apr 2019
let futureDate = Date(timeInterval: 3 * day, since: currentDate) // Sun 28 Apr 2019
if Calendar.current.isDateInThisWeek(futureDate) { 
    // this will be executed if first day of week is Monday
} else {
    // this will be executed if first day of week is Sunday
}

代码根据以下条件评估日期是否在范围 (sameWeek, nextWeek) 内Calendar实例。

If Calendar实例是current它将根据设备设置确定一周的开始(星期一或星期日),但如果您想要不同的行为,您可以更改Calendar实例:Calendar(identifier: .chinese).isDateInNextWeek(someDate)

如果我们尝试创建,此代码也适用DateComponents具有不正确的值,如下所示:DateComponents(year: 2019, month: 13)。 在本例中它创建日期01 Jan 2020.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Swift - 检查日期是否在下周/下个月。 ( isDateInNextWeek() isDateInNextMonth() ) 的相关文章

随机推荐