Simplified US date format check and Date/Time date null check

This commit is contained in:
Caleb Kleveter 2018-06-12 16:38:18 -05:00
parent 6293e5f26f
commit 0b13457b82
No known key found for this signature in database
GPG Key ID: B38DBD5CF2C98D69
1 changed files with 8 additions and 10 deletions

View File

@ -56,6 +56,7 @@ extension String {
var day: Int? var day: Int?
var month: Int? var month: Int?
var year: Int? var year: Int?
// check for german dates ((d)d.(m)m.(yy)yy) or ((m)m.(yy)yy) or ((d)d.(m)m) // check for german dates ((d)d.(m)m.(yy)yy) or ((m)m.(yy)yy) or ((d)d.(m)m)
if (contains(".")) { // most obvious sign for a german date if (contains(".")) { // most obvious sign for a german date
let parts = split(separator: ".").map { Int($0) ?? 0} let parts = split(separator: ".").map { Int($0) ?? 0}
@ -76,8 +77,8 @@ extension String {
} }
} else if (contains("-") || contains("/")) { } else if (contains("-") || contains("/")) {
let sep: Character = self.contains("/") ? "/" : "-" let sep: Character = self.contains("/") ? "/" : "-"
let usWay = contains("/") let usWay = sep == "/"
let parts = split(separator: sep).map { Int($0) ?? 0} let parts = split(separator: sep).map { Int($0) ?? 0 }
let isoOrder = parts[0] > 12 && parts[1] < 13 let isoOrder = parts[0] > 12 && parts[1] < 13
if (parts.count == 3) { if (parts.count == 3) {
let reverseIsoOrder = !usWay && parts[2] > 12 && parts[1] < 13 let reverseIsoOrder = !usWay && parts[2] > 12 && parts[1] < 13
@ -134,11 +135,11 @@ extension String {
if (year == nil) { if (year == nil) {
year = calendar.component(.year, from: date) year = calendar.component(.year, from: date)
} }
if (year! < 100 && year! < 50) { if (year! < 50) {
year = 2000 + year! year = 2000 + year!
} }
let components = DateComponents(calendar: calendar, year: year, month: month, day: day) let components = DateComponents(calendar: calendar, year: year, month: month, day: day)
return components.date! return components.date
} }
public func swiftyDateTime(calendar: Calendar = Calendar.current, baseDate: Date = Date()) -> Date? { public func swiftyDateTime(calendar: Calendar = Calendar.current, baseDate: Date = Date()) -> Date? {
if (self == "") { return nil } if (self == "") { return nil }
@ -154,8 +155,7 @@ extension String {
let parts:[String] = split(separator: "T").map(String.init) let parts:[String] = split(separator: "T").map(String.init)
date = parts[0].swiftyDate() date = parts[0].swiftyDate()
time = parts[1].swiftyTime() time = parts[1].swiftyTime()
} } else if (cleanString.contains(" ") && (cleanString.contains(":") || cleanString.contains("am") || cleanString.contains("pm")) && (cleanString.contains("/") || cleanString.contains("-") || cleanString.contains("."))) {
else if (cleanString.contains(" ") && (cleanString.contains(":") || cleanString.contains("am") || cleanString.contains("pm")) && (cleanString.contains("/") || cleanString.contains("-") || cleanString.contains("."))) {
if let pos = index(of: " ") { if let pos = index(of: " ") {
date = String(self[..<pos]).swiftyDate() date = String(self[..<pos]).swiftyDate()
time = String(self[pos...]).swiftyTime() time = String(self[pos...]).swiftyTime()
@ -168,9 +168,7 @@ extension String {
} else { } else {
date = swiftyDate() date = swiftyDate()
} }
if (date == nil) {
return nil return date == nil ? nil : date! + time
}
return date! + time
} }
} }