Last active
December 18, 2023 18:37
-
-
Save Codelaby/1ce20307e0621aac1571bf50235a5581 to your computer and use it in GitHub Desktop.
Grouped dates
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import Foundation | |
// Array de fechas como strings | |
let dateStrings = [ | |
"2023-01-01 08:00:00", | |
"2023-01-01 10:30:00", | |
"2023-01-01 12:45:00", | |
"2023-01-01 08:00:00", | |
"2023-01-01 18:00:00", | |
"2023-01-01 10:30:00", | |
"2023-01-01 12:45:00", | |
"2023-01-01 23:59:59", | |
"2023-01-02 10:30:00", | |
] | |
// Función para parsear las fechas | |
func parseDates(dateStrings: [String]) -> [Date] { | |
let dateFormatter = DateFormatter() | |
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss" | |
return dateStrings.compactMap { dateFormatter.date(from: $0) } | |
} | |
// Parsear las fechas | |
let parsedDates = parseDates(dateStrings: dateStrings) | |
// Imprimir las fechas parseadas | |
/*for (index, date) in parsedDates.enumerated() { | |
print("Fecha \(index + 1): \(date)") | |
}*/ | |
// Función para agrupar las fechas por horas | |
func groupDatesByHour(dates: [Date]) -> [Int: [Date]] { | |
var groupedDates: [Int: [Date]] = [:] | |
let calendar = Calendar.current | |
let hourComponent = calendar.component(.hour, from: dates.first ?? Date()) | |
for date in dates { | |
let hour = calendar.component(.hour, from: date) | |
let adjustedHour = hour - hourComponent // Ajuste para evitar desbordamiento de índices negativos | |
if var datesInHour = groupedDates[adjustedHour] { | |
datesInHour.append(date) | |
groupedDates[adjustedHour] = datesInHour | |
} else { | |
groupedDates[adjustedHour] = [date] | |
} | |
} | |
return groupedDates | |
} | |
func groupDatesByHourAndDate(dates: [Date]) -> [String: [Date]] { | |
var groupedDates: [String: [Date]] = [:] | |
let dateFormatter = DateFormatter() | |
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm" | |
for date in dates { | |
let key = dateFormatter.string(from: date) | |
if var datesInKey = groupedDates[key] { | |
datesInKey.append(date) | |
groupedDates[key] = datesInKey | |
} else { | |
groupedDates[key] = [date] | |
} | |
} | |
return groupedDates | |
} | |
// Ejemplo de uso | |
let groupedDates = groupDatesByHour(dates: parsedDates) | |
// Imprimir las fechas agrupadas por horas | |
/*for (hour, datesInHour) in groupedDates { | |
print("Hora \(hour):") | |
for date in datesInHour { | |
print(" \(date)") | |
} | |
} | |
*/ | |
// Ejemplo de uso | |
let groupedDates2 = groupDatesByHourAndDate(dates: parsedDates) | |
// Imprimir las fechas agrupadas por horas dentro de la misma fecha | |
for (key, datesInKey) in groupedDates2 { | |
print("---- \(key) count \(datesInKey.count)") | |
for date in datesInKey { | |
print(" \(date)") | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment