transportation the programming programación para lenguaje language español descargar swift

the - swift(lenguaje de programación)



¿Cómo puedo encontrar la cantidad de días en un mes y año determinados usando el método swift? (6)

Swift 3.1 y Xcode 8+

let calendar = Calendar.current let date = Date() // Calculate start and end of the current year (or month with `.month`): let interval = calendar.dateInterval(of: .year, for: date)! //change year it will no of days in a year , change it to month it will give no of days in a current month // Compute difference in days: let days = calendar.dateComponents([.day], from: interval.start, to: interval.end).day! print(days)

Quiero encontrar el número total de días en un mes y año dados. Ejemplo: quiero encontrar el número total de días en el año = 2015, mes = 7


Swift 2.0

func getDaysInMonth(month: Int, year: Int) -> Int { let calendar = NSCalendar.currentCalendar() let startComps = NSDateComponents() startComps.day = 1 startComps.month = month startComps.year = year let endComps = NSDateComponents() endComps.day = 1 endComps.month = month == 12 ? 1 : month + 1 endComps.year = month == 12 ? year + 1 : year let startDate = calendar.dateFromComponents(startComps)! let endDate = calendar.dateFromComponents(endComps)! let diff = calendar.components(NSCalendarUnit.Day, fromDate: startDate, toDate: endDate, options: NSCalendarOptions.MatchFirst) return diff.day } let days = getDaysInMonth(4, year: 2015) // April 2015 has 30 days print(days) // Prints 30

Swift 1.2

func getDaysInMonth(month: Int, year: Int) -> Int { let calendar = NSCalendar.currentCalendar() let startComps = NSDateComponents() startComps.day = 1 startComps.month = month startComps.year = year let endComps = NSDateComponents() endComps.day = 1 endComps.month = month == 12 ? 1 : month + 1 endComps.year = month == 12 ? year + 1 : year let startDate = calendar.dateFromComponents(startComps)! let endDate = calendar.dateFromComponents(endComps)! let diff = calendar.components(NSCalendarUnit.CalendarUnitDay, fromDate: startDate, toDate: endDate, options: NSCalendarOptions.allZeros) return diff.day } let days = getDaysInMonth(4, 2015) // There were 30 days in April 2015 println(days) // Prints 30


¿Qué tal un año determinado?

Lo siguiente es imprimir la cantidad de días en el mes de la fecha:

let range = userCalendar.range(of: .day, in: .year, for: Date())! print("Days In Year: /(range.count)") // prints 31

... y no el número de días en el año de la fecha como se esperaba: /


En formato de extensión, usar self para poder devolver el número de días más dinámicamente (Swift 3).

extension Date { func getDaysInMonth() -> Int{ let calendar = Calendar.current let dateComponents = DateComponents(year: calendar.component(.year, from: self), month: calendar.component(.month, from: self)) let date = calendar.date(from: dateComponents)! let range = calendar.range(of: .day, in: .month, for: date)! let numDays = range.count return numDays } }


Para obtener el número de días y todas las fechas en un mes y año determinado, intente esto.

func getAllDates(month: Int, year: Int) -> [Date] { let dateComponents = DateComponents(year: year, month: month) let calendar = Calendar.current let date = calendar.date(from: dateComponents)! let range = calendar.range(of: .day, in: .month, for: date)! let numDays = range.count let formatter = DateFormatter() formatter.dateFormat = "yyyy MM dd" formatter.timeZone = TimeZone(abbreviation: "GMT+0:00") var arrDates = [Date]() for day in 1...numDays { let dateString = "/(year) /(month) /(day)" if let date = formatter.date(from: dateString) { arrDates.append(date) } } return arrDates }

Uso:

let arrDatesInGivenMonthYear = getAllDates(month: 1, year: 2018) debugPrint(arrDatesInGivenMonthYear) //Output: [2018-01-01 00:00:00 +0000, 2018-01-02 00:00:00 +0000, ... , 2018-01-31 00:00:00 +0000] let numberOfDays = arrDatesInGivenMonthYear.count debugPrint(numberOfDays) //Output: 31


Primero crea un NSDate para el año y mes dados:

let dateComponents = NSDateComponents() dateComponents.year = 2015 dateComponents.month = 7 let calendar = NSCalendar.currentCalendar() let date = calendar.dateFromComponents(dateComponents)!

Luego, use el método rangeOfUnit() , como se describe en Número de días en el mes actual con el SDK de iPhone. :

// Swift 2: let range = calendar.rangeOfUnit(.Day, inUnit: .Month, forDate: date) // Swift 1.2: let range = calendar.rangeOfUnit(.CalendarUnitDay, inUnit: .CalendarUnitMonth, forDate: date) let numDays = range.length print(numDays) // 31

Actualización para Swift 3 (Xcode 8):

let dateComponents = DateComponents(year: 2015, month: 7) let calendar = Calendar.current let date = calendar.date(from: dateComponents)! let range = calendar.range(of: .day, in: .month, for: date)! let numDays = range.count print(numDays) // 31