mirror of https://github.com/oxen-io/session-ios
				
				
				
			
			You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
	
	
		
			90 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Swift
		
	
		
		
			
		
	
	
			90 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Swift
		
	
| 
											3 years ago
										 | // Copyright © 2022 Rangeproof Pty Ltd. All rights reserved. | ||
|  | 
 | ||
|  | import Foundation | ||
|  | import SessionUtilitiesKit | ||
|  | 
 | ||
|  | public extension Date { | ||
|  |     var formattedForDisplay: String { | ||
|  |         let dateNow: Date = Date() | ||
|  |          | ||
|  |         guard Calendar.current.isDate(self, equalTo: dateNow, toGranularity: .year) else { | ||
|  |             // Last year formatter: Nov 11 13:32 am, 2017 | ||
|  |             return Date.oldDateFormatter.string(from: self) | ||
|  |         } | ||
|  |          | ||
|  |         guard Calendar.current.isDate(self, equalTo: dateNow, toGranularity: .weekOfYear) else { | ||
|  |             // This year formatter: Jun 6 10:12 am | ||
|  |             return Date.thisYearFormatter.string(from: self) | ||
|  |         } | ||
|  |          | ||
|  |         guard Calendar.current.isDate(self, equalTo: dateNow, toGranularity: .day) else { | ||
|  |             // Day of week formatter: Thu 9:11 pm | ||
|  |             return Date.thisWeekFormatter.string(from: self) | ||
|  |         } | ||
|  |          | ||
|  |         guard Calendar.current.isDate(self, equalTo: dateNow, toGranularity: .minute) else { | ||
|  |             // Today formatter: 8:32 am | ||
|  |             return Date.todayFormatter.string(from: self) | ||
|  |         } | ||
|  |          | ||
|  |         return "DATE_NOW".localized() | ||
|  |     } | ||
|  | } | ||
|  | 
 | ||
|  | // MARK: - Formatters | ||
|  | 
 | ||
|  | fileprivate extension Date { | ||
|  |     static let oldDateFormatter: DateFormatter = { | ||
|  |         let result: DateFormatter = DateFormatter() | ||
|  |         result.locale = Locale.current | ||
|  |         result.dateStyle = .medium | ||
|  |         result.timeStyle = .short | ||
|  |         result.doesRelativeDateFormatting = true | ||
|  |          | ||
|  |         return result | ||
|  |     }() | ||
|  |      | ||
|  |     static let thisYearFormatter: DateFormatter = { | ||
|  |         let result: DateFormatter = DateFormatter() | ||
|  |         result.locale = Locale.current | ||
|  |          | ||
|  |         // Jun 6 10:12 am | ||
|  |         result.dateFormat = "MMM d \(hourFormat)" | ||
|  |          | ||
|  |         return result | ||
|  |     }() | ||
|  |      | ||
|  |     static let thisWeekFormatter: DateFormatter = { | ||
|  |         let result: DateFormatter = DateFormatter() | ||
|  |         result.locale = Locale.current | ||
|  |          | ||
|  |         // Mon 11:36 pm | ||
|  |         result.dateFormat = "EEE \(hourFormat)" | ||
|  |          | ||
|  |         return result | ||
|  |     }() | ||
|  |      | ||
|  |     static let todayFormatter: DateFormatter = { | ||
|  |         let result: DateFormatter = DateFormatter() | ||
|  |         result.locale = Locale.current | ||
|  |          | ||
|  |         // 9:10 am | ||
|  |         result.dateFormat = hourFormat | ||
|  |          | ||
|  |         return result | ||
|  |     }() | ||
|  |      | ||
|  |     static var hourFormat: String { | ||
|  |         guard | ||
|  |             let format: String = DateFormatter.dateFormat(fromTemplate: "j", options: 0, locale: Locale.current), | ||
|  |             format.range(of: "a") != nil | ||
|  |         else { | ||
|  |             // If we didn't find 'a' then it's 24-hour time | ||
|  |             return "HH:mm" | ||
|  |         } | ||
|  |          | ||
|  |         // If we found 'a' in the format then it's 12-hour time | ||
|  |         return "h:mm a" | ||
|  |     } | ||
|  | } |