AutoCat/AutoCat/Extensions/Dated.swift
2020-04-03 21:30:54 +03:00

41 lines
1.2 KiB
Swift

import Foundation
import RxDataSources
import SwiftDate
protocol Dated {
var date: Date { get }
}
extension Vehicle: Dated {
var date: Date {
Date(timeIntervalSince1970: self.addedDate/1000)
}
}
extension RandomAccessCollection where Element: Dated & IdentifiableType & Equatable {
func groupedByDate() -> [DateSection<Element>] {
let now = Date()
let monthStart = now.dateAtStartOf(.month)
var sections: [TimeInterval: [Element]] = [:]
for vehicle in self {
var key = vehicle.date.dateAtStartOf(.day).timeIntervalSince1970
if vehicle.date.isBeforeDate(monthStart, orEqual: false, granularity: .day) {
key = vehicle.date.dateAtStartOf(.month).timeIntervalSince1970
}
if sections[key] == nil {
sections[key] = [vehicle]
} else {
sections[key]?.append(vehicle)
}
}
var sectionsArray: [DateSection<Element>] = []
for (timestamp, vehicles) in sections {
sectionsArray.append(DateSection<Element>(timestamp: timestamp, items: vehicles))
}
return sectionsArray.sorted { $0.timestamp > $1.timestamp }
}
}