Учитывая год и месяц, как проверить, что определенный день существует в этом месяце
Я пытаюсь проверить, существует ли определенный день в месяце или нет. Однако не смог найти ничего полезного. Чтобы привести пример, я попробовал ниже код в Playground;
var components = DateComponents()
components.month = 2
components.year = 2016
components.day = 30
components.calendar = Calendar.current
components.date
Это дает ответ;
"Mar 1, 2016, 12:00 AM"
Таким образом, он пытается манипулировать временными поясами и двигает стрелку. Поэтому я не могу найти способ проверить, существует ли конкретный день в данном месяце и Году.
Может кто-нибудь, пожалуйста, проводник.4 ответа:
DateComponents
имеет свойствоisValidDate
, которое можно использовать для этой цели:var components = DateComponents() components.month = 2 components.year = 2016 components.day = 30 components.calendar = Calendar.current print(components.isValidDate) // false
Давайте разберем это на -
Как проверить количество дней в месяце-году?
Тогда ваша задача сводится к проверке, находится ли данный день в диапазоне [1, numDaysInMonthYear).
Код для вышеизложенного таков:
// Swift 2: let range = calendar.rangeOfUnit(.Day, inUnit: .Month, forDate: date) // Swift 1.2: let range = calendar.rangeOfUnit(.CalendarUnitDay, inUnit: .CalendarUnitMonth, forDate: date) let numDaysInMonthYear = range.length print(numDaysInMonthYear) // 31
Кредиты: Как найти количество дней в данном месяце и году с помощью swift
Попробуйте этот метод ниже, вы можете проверить, существует ли конкретный день в месяце.
function checkDayIsExist(year:Int,month:Int,day:Int) -> Bool { let dateComponents = DateComponents(year: year, month: month) let calendar = Calendar.current let date = calendar.date(from: dateComponents)! let numberOfDays = calendar.range(of: .day, in: .month, for: date)! return numberOfDays.count >= day }
Вызов по
print(checkDayIsExist(year:2017,month:7,day:31)) // true
Вы можете проверить, используя
NSDateFormatter / DateFormatter
let dateFormatter = DateFormatter() dateFormatter.dateFormat = "dd MM yyyy" let dateString = "30 02 2017" if let date = dateFormatter.date(from: dateString) { print("Date \(date)") } else { print("Date not existed") }
Вы можете изменить форматирование даты на основе входной строки.