Skip to content

Instantly share code, notes, and snippets.

@priyans05
Last active June 27, 2018 09:35
Show Gist options
  • Save priyans05/d03782c4536e1a9aef0ec32dae2599aa to your computer and use it in GitHub Desktop.
Save priyans05/d03782c4536e1a9aef0ec32dae2599aa to your computer and use it in GitHub Desktop.
Swift Dates Extension to create String Array from date to date
extension Date {
// Give startDate and endDate -> reurns an array of strings of dates inbetween to use in URL or anyother places where you can input String.
static func uppendDatesBetweenInterval(_ startDate: Date, _ endDate: Date) -> [String]{
var dates = [String]()
var startDate = startDate
let calendar = Calendar.current
let fmt = DateFormatter()
fmt.dateFormat = "yyyy-MM-dd"
while startDate >= endDate {
// print(fmt.string(from: startDate))
dates.append(fmt.string(from: startDate))
startDate = calendar.date(byAdding: .day, value: -1, to: startDate)!
}
return dates
}
//Converts date into String.
static func dateFromString(_ dateString: String) -> Date {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
return dateFormatter.date(from: dateString)!
}
//Will return datesArray for the past number of days
func allDatesFromTodayTillTheCountOf(numberOfDays: Int) -> [Date] {
var today = self
var datesForTheCountOfDays: [Date] = []
let calendar = Calendar.current
let endDate = calendar.date(byAdding: .day, value: -numberOfDays, to: today)
if let endDate = endDate {
while today >= endDate {
datesForTheCountOfDays.append(today)
today = calendar.date(byAdding: .day, value: -1, to: today)!
}
}
return datesForTheCountOfDays
}
//returns array of dates by passing date you want from.
func allDatesTill(date: Date) -> [Date] {
var today = self
var allDates: [Date] = []
let calendar = Calendar.current
let endDate = calendar.date(byAdding: .day, value: -1, to: date)
if let endDate = endDate {
while today >= endDate {
allDates.append(today)
today = calendar.date(byAdding: .day, value: -1, to: today)!
}
}
return allDates
}
//returns an array of String - pass StartDate and numberOfDays you want in an array
func returnArrayOfDateStringsBetween(_ startDate: Date, to numberOfDays: Int) -> [String] {
var dates = [String]()
var startDate = startDate
let calendar = Calendar.current
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd"
let endDate = calendar.date(byAdding: .day, value: -numberOfDays, to: startDate)
if let endDate = endDate {
while startDate >= endDate {
dates.append(formatter.string(from: startDate))
startDate = calendar.date(byAdding: .day, value: -1, to: startDate)!
}
}
return dates
}
}
var dates: [String]!
let today = Date()
today.allDatesFromTodayTillTheCountOf(numberOfDays: 10)
//["Jun 26, 2018 at 10:51 AM", "Jun 25, 2018 at 10:51 AM", "Jun 24, 2018 at 10:51 AM", "Jun 23, 2018 at 10:51 AM", "Jun 22, 2018 at 10:51 AM", "Jun 21, 2018 at 10:51 AM", "Jun 20, 2018 at 10:51 AM", "Jun 19, 2018 at 10:51 AM", "Jun 18, 2018 at 10:51 AM", "Jun 17, 2018 at 10:51 AM", "Jun 16, 2018 at 10:51 AM"]
let formatter = DateFormatter()
formatter.dateFormat = "yyyy/MM/dd"
let someDate = formatter.date(from: "2018/06/15")
today.allDatesTill(date: someDate!)
//["Jun 26, 2018 at 10:51 AM", "Jun 25, 2018 at 10:51 AM", "Jun 24, 2018 at 10:51 AM", "Jun 23, 2018 at 10:51 AM", "Jun 22, 2018 at 10:51 AM", "Jun 21, 2018 at 10:51 AM", "Jun 20, 2018 at 10:51 AM", "Jun 19, 2018 at 10:51 AM", "Jun 18, 2018 at 10:51 AM", "Jun 17, 2018 at 10:51 AM", "Jun 16, 2018 at 10:51 AM", "Jun 15, 2018 at 10:51 AM", "Jun 14, 2018 at 10:51 AM"]
var date = Date()
today.returnArrayOfDateStringsBetween(date, to: 10)
//["2018-06-26", "2018-06-25", "2018-06-24", "2018-06-23", "2018-06-22", "2018-06-21", "2018-06-20", "2018-06-19", "2018-06-18", "2018-06-17", "2018-06-16"]
dates = Date.uppendDatesBetweenInterval(Date.dateFromString("2018-06-25"), Date.dateFromString("2018-06-20"))
print(dates)
//(["2018-06-25", "2018-06-24", "2018-06-23", "2018-06-22", "2018-06-21", "2018-06-20"])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment