Skip to content

Instantly share code, notes, and snippets.

@Codelaby
Last active December 18, 2023 18:37
Show Gist options
  • Save Codelaby/1ce20307e0621aac1571bf50235a5581 to your computer and use it in GitHub Desktop.
Save Codelaby/1ce20307e0621aac1571bf50235a5581 to your computer and use it in GitHub Desktop.
Grouped dates
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