Это использование:
let calendar = Calendar.current
let date1 = calendar.date(byAdding: .month, value: -1, to: Date())! // -1 mean previous month
let range = calendar.range(of: .day, in: .month, for: date1)!
let numDays = range.count
print(numDays)
ВЫХОД :
31
Просто используйте Calendar.current.range
, посмотрите ниже.
let range = Calendar.current.range(of: .day, in: .month, for: PrevDate)!
let numDays = range.count
То, что вы получили, - это всего лишь дата ровно месяц назад, чтобы получить количество дней в месяце, вы должны сделать еще один шаг:
let calendar = Calendar.current
let prevDate = calendar.date(byAdding: .month, value: -1, to: Date())!
let numberOfDaysInPreviousMonth = calendar.range(of: .day, in: .month, for: prevDate)?.count
И все, у вас есть счет в numberOfDaysInPreviousMonth
.
Попробуйте ниже код:
let calendar = NSCalendar.current
let currentDate = Date()
let month = calendar.component(.month, from: currentDate)
let year = calendar.component(.year, from: currentDate)
let dateComponents = DateComponents(year: year, month: month - 1)
let date = calendar.date(from: dateComponents)!
let range = calendar.range(of: .day, in: .month, for: date)!
let numDays = range.count
print(numDays)
Здесь вы также можете изменить год в соответствии с вашими требованиями.
Надеюсь это поможет.
Почему вы делаете объект Date
несколько раз?
Это очень распространенный вопрос, и вы можете найти решение, выполнив поиск в Google в течение 1-2 минут.