@@ -337,10 +337,43 @@ open class DatabaseDecoder {
337337 let uuid = UUID ( uuidString: castValue)
338338 return try castedValue ( uuid, type, key)
339339 } else if type is Date . Type {
340- let castValue = try castedValue ( value, Double . self, key)
341- let date = Date ( timeIntervalSinceReferenceDate: castValue)
342- return try castedValue ( date, type, key)
343- } else {
340+ switch decoder. dateEncodingStrategy {
341+ case . double:
342+ let castValue = try castedValue ( value, Double . self, key)
343+ let date = Date ( timeIntervalSinceReferenceDate: castValue)
344+ return try castedValue ( date, type, key)
345+ case . timestamp:
346+ if let dateValue = value as? Date {
347+ return try castedValue ( dateValue, type. self, key)
348+ } else {
349+ let castValue = try castedValue ( value, String . self, key)
350+ let dateFormatter = DateFormatter ( )
351+ dateFormatter. dateFormat = " yyyy-MM-dd HH:mm:ss "
352+ let date = dateFormatter. date ( from: castValue)
353+ return try castedValue ( date, type. self, key)
354+ }
355+ case . date:
356+ if let dateValue = value as? Date {
357+ return try castedValue ( dateValue, type. self, key)
358+ } else {
359+ let castValue = try castedValue ( value, String . self, key)
360+ let dateFormatter = DateFormatter ( )
361+ dateFormatter. dateFormat = " yyyy-MM-dd "
362+ let date = dateFormatter. date ( from: castValue)
363+ return try castedValue ( date, type. self, key)
364+ }
365+ case . time:
366+ if let dateValue = value as? Date {
367+ return try castedValue ( dateValue, type. self, key)
368+ } else {
369+ let castValue = try castedValue ( value, String . self, key)
370+ let dateFormatter = DateFormatter ( )
371+ dateFormatter. dateFormat = " HH:mm:ss "
372+ let date = dateFormatter. date ( from: castValue)
373+ return try castedValue ( date, type. self, key)
374+ }
375+ }
376+ } else {
344377 throw RequestError ( . ormDatabaseDecodingError, reason: " Unsupported type: \( String ( describing: type) ) for value: \( String ( describing: value) ) " )
345378 }
346379 }
0 commit comments