Reputation: 87
How can I get the date of previous month matching specified day ? in Swift
if I have this function getPreviousMonthDate(matchingDay day: Int) -> Date
Examples: following (dd/mm/yyyy)
If Today is 25/07/2022
and I call getPreviousMonthDate(matchingDay: 27)
: return value would be 27/06/2022
.
If Today is 18/04/2022
and I call getPreviousMonthDate(matchingDay: 14)
: return value would be 14/03/2022
.
If Today is 15/01/2022
and I call getPreviousMonthDate(matchingDay: 16)
: return value would be 16/12/2021
.
and so on...
Upvotes: 0
Views: 456
Reputation: 1118
You can use date components as following:
func getPreviousMonthDate(matchingDay day: Int) -> Date {
let calendar = Calendar.current
let comps = calendar.dateComponents([.year, .month, .day], from: Date())
var comps2 = DateComponents()
comps2.year = comps.year
comps2.month = comps.month! - 1
comps2.day = day
return calendar.date(from: comps2)!
}
I force-unwrapped the date to match your function declaration, I suggest that you deal with the optional dates properly though.
Upvotes: 1