Bar*_*zyk 8 cocoa cocoa-touch nsdate date-arithmetic
我们假设今天是星期三.我可以打破NSDate一下NSDateComponents,但我需要找到NSDate下一个即将到来的星期一.如果今天是星期一,则下一个即将到来的星期一是今天.什么是实现这一目标的正确方法?
San*_*eep 24
您可以使用对象上的nextDateAfterDate:方法NSCalendar来实现此目的,
let now = Date() // today
var matchingComponents = DateComponents()
matchingComponents.weekday = 2 // Monday
let comingMonday = Calendar.current.nextDate(after: now,
matching: matchingComponents,
matchingPolicy:.nextTime)
Run Code Online (Sandbox Code Playgroud)
在这里,是一个查找下一个星期一的简单方法.如果今天是星期一,则以下函数今天返回,否则最接近下周一.请注意,它使用en_POSIX_US,以便可以匹配日期.当语言环境为en_POSIX_US时,工作日符号变为,
["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
Run Code Online (Sandbox Code Playgroud)
而且,这是如何使用这些日子,
func findNext(_ day: String, afterDate date: Date) -> Date? {
var calendar = Calendar.current
calendar.locale = Locale(identifier: "en_US_POSIX")
let weekDaySymbols = calendar.weekdaySymbols
let indexOfDay = weekDaySymbols.index(of: day)
assert(indexOfDay != nil, "day passed should be one of \(weekDaySymbols), invalid day: \(day)")
let weekDay = indexOfDay! + 1
let components = calendar.component(.weekday, from: date)
if components == weekDay {
return date
}
var matchingComponents = DateComponents()
matchingComponents.weekday = weekDay // Monday
let nextDay = calendar.nextDate(after: date,
matching: matchingComponents,
matchingPolicy:.nextTime)
return nextDay!
}
let nextMonday = findNext("Monday", afterDate: Date())
let mondayAfterThat = findNext("Monday", afterDate: nextMonday!)
let thursday = findNext("Thursday", afterDate: mondayAfterThat!)
Run Code Online (Sandbox Code Playgroud)