From 18fa544b4a9d70b5cadf369afe773f6912d75168 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafael=20Ar=C3=B4xa?= Date: Sun, 21 May 2017 21:42:07 -0500 Subject: [PATCH] Preemptively serialize Dates in QueryEncoder Fix #113 by preemptively serializing Date objects before they are sent to JSONSerialization by the Client. --- .../Internal/QueryEncoder.swift | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/Sources/ParseLiveQuery/Internal/QueryEncoder.swift b/Sources/ParseLiveQuery/Internal/QueryEncoder.swift index ed0ccb1e..e15f691e 100644 --- a/Sources/ParseLiveQuery/Internal/QueryEncoder.swift +++ b/Sources/ParseLiveQuery/Internal/QueryEncoder.swift @@ -36,6 +36,8 @@ extension Dictionary where Key: ExpressibleByStringLiteral, Value: AnyObject { encodedQueryDictionary[key] = geoPoint.encodedDictionary as? Value } else if let object = val as? PFObject { encodedQueryDictionary[key] = PFPointerObjectEncoder.object().encode(object) as? Value + } else if let date = val as? Date { + encodedQueryDictionary[key] = date.encodedString as? Value } else { encodedQueryDictionary[key] = val } @@ -51,3 +53,20 @@ extension PFGeoPoint { "longitude": longitude] } } + +fileprivate extension Formatter { + fileprivate static let iso8601: DateFormatter = { + let formatter = DateFormatter() + formatter.calendar = Calendar(identifier: .iso8601) + formatter.locale = Locale(identifier: "en_US_POSIX") + formatter.timeZone = TimeZone(secondsFromGMT: 0) + formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSXXXXX" + return formatter + }() +} + +fileprivate extension Date { + fileprivate var encodedString: String { + return Formatter.iso8601.string(from: self) + } +}