From c5687a9a5ff34342eae66f319392bba1c4896023 Mon Sep 17 00:00:00 2001 From: Aamir Nazir Date: Fri, 15 Dec 2017 12:40:37 +0500 Subject: [PATCH 1/2] Date+Manipulations: Updated if-else structure with switch case to optimize code performance --- .../DateTools/Date+Manipulations.swift | 39 ++++++++++--------- 1 file changed, 21 insertions(+), 18 deletions(-) diff --git a/DateToolsSwift/DateTools/Date+Manipulations.swift b/DateToolsSwift/DateTools/Date+Manipulations.swift index 72b31358..25c18edd 100644 --- a/DateToolsSwift/DateTools/Date+Manipulations.swift +++ b/DateToolsSwift/DateTools/Date+Manipulations.swift @@ -24,31 +24,33 @@ public extension Date { * with all smaller components set to their minimum */ public func start(of component: Component) -> Date { - var newDate = self; - if component == .second { - newDate.second(self.second) - } - else if component == .minute { + var newDate = self + + switch component { + case .second: + newDate.second(second) + case .minute: newDate.second(0) - } else if component == .hour { + case .hour: newDate.second(0) newDate.minute(0) - } else if component == .day { + case .day: newDate.second(0) newDate.minute(0) newDate.hour(0) - } else if component == .month { + case .month: newDate.second(0) newDate.minute(0) newDate.hour(0) newDate.day(1) - } else if component == .year { + case .year: newDate.second(0) newDate.minute(0) newDate.hour(0) newDate.day(1) newDate.month(1) } + return newDate } @@ -61,30 +63,31 @@ public extension Date { * with all smaller components set to their maximum */ public func end(of component: Component) -> Date { - var newDate = self; - if component == .second { + var newDate = self + + switch component { + case .second: newDate.second(newDate.second + 1) newDate = newDate - 0.001 - } - else if component == .minute { + case .minute: newDate.second(60) newDate = newDate - 0.001 - } else if component == .hour { + case .hour: newDate.second(60) newDate = newDate - 0.001 newDate.minute(59) - } else if component == .day { + case .day: newDate.second(60) newDate = newDate - 0.001 newDate.minute(59) newDate.hour(23) - } else if component == .month { + case .month: newDate.second(60) newDate = newDate - 0.001 newDate.minute(59) newDate.hour(23) newDate.day(daysInMonth(date: newDate)) - } else if component == .year { + case .year: newDate.second(60) newDate = newDate - 0.001 newDate.minute(59) @@ -92,7 +95,7 @@ public extension Date { newDate.month(12) newDate.day(31) } - + return newDate } From 64aa58c93816bdb0ce7f81e5e45f84e34fd777ad Mon Sep 17 00:00:00 2001 From: Aamir Nazir Date: Fri, 15 Dec 2017 12:48:23 +0500 Subject: [PATCH 2/2] Date+Manipulations: Optimized function for calculating total days in month --- .../DateTools/Date+Manipulations.swift | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/DateToolsSwift/DateTools/Date+Manipulations.swift b/DateToolsSwift/DateTools/Date+Manipulations.swift index 25c18edd..34cf29e0 100644 --- a/DateToolsSwift/DateTools/Date+Manipulations.swift +++ b/DateToolsSwift/DateTools/Date+Manipulations.swift @@ -100,19 +100,15 @@ public extension Date { } public func daysInMonth(date: Date) -> Int { + let monthDays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] + + // Leap Year handling let month = date.month - if month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12 { - // 31 day month - return 31 - } else if month == 2 && date.isInLeapYear { - // February with leap year - return 29 - } else if month == 2 && !date.isInLeapYear { - // February without leap year - return 28 + if date.isInLeapYear && month == 2 { + // Leap Year have 29 days in February, (month - 1) for array indexing + return monthDays[month - 1] + 1 } else { - // 30 day month - return 30 + return monthDays[month - 1] } }