Limits relative date strings to “Yesterday” and “Today”

Any relative date older than “Yesterday” will be displayed as absolute date instead.
This commit is contained in:
Riley Testut
2023-10-16 18:27:48 -05:00
committed by Magesh K
parent d53e36633d
commit 727ab0b554
3 changed files with 11 additions and 18 deletions

View File

@@ -31,13 +31,6 @@ final class AppContentViewController: UITableViewController
private lazy var screenshotsDataSource = self.makeScreenshotsDataSource() private lazy var screenshotsDataSource = self.makeScreenshotsDataSource()
private lazy var dateFormatter: DateFormatter = {
let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .medium
dateFormatter.timeStyle = .none
return dateFormatter
}()
private lazy var byteCountFormatter: ByteCountFormatter = { private lazy var byteCountFormatter: ByteCountFormatter = {
let formatter = ByteCountFormatter() let formatter = ByteCountFormatter()
return formatter return formatter
@@ -84,7 +77,7 @@ final class AppContentViewController: UITableViewController
{ {
self.versionDescriptionTextView.text = version.localizedDescription self.versionDescriptionTextView.text = version.localizedDescription
self.versionLabel.text = String(format: NSLocalizedString("Version %@", comment: ""), version.localizedVersion) self.versionLabel.text = String(format: NSLocalizedString("Version %@", comment: ""), version.localizedVersion)
self.versionDateLabel.text = Date().relativeDateString(since: version.date, dateFormatter: self.dateFormatter) self.versionDateLabel.text = Date().relativeDateString(since: version.date)
self.sizeLabel.text = self.byteCountFormatter.string(fromByteCount: version.size) self.sizeLabel.text = self.byteCountFormatter.string(fromByteCount: version.size)
} }
else else

View File

@@ -63,13 +63,6 @@ class MyAppsViewController: UICollectionViewController, PeekPopPreviewing
// Cache // Cache
private var cachedUpdateSizes = [String: CGSize]() private var cachedUpdateSizes = [String: CGSize]()
private lazy var dateFormatter: DateFormatter = {
let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .medium
dateFormatter.timeStyle = .none
return dateFormatter
}()
required init?(coder aDecoder: NSCoder) required init?(coder aDecoder: NSCoder)
{ {
super.init(coder: aDecoder) super.init(coder: aDecoder)
@@ -244,7 +237,7 @@ private extension MyAppsViewController
cell.bannerView.configure(for: app) cell.bannerView.configure(for: app)
let versionDate = Date().relativeDateString(since: latestSupportedVersion.date, dateFormatter: self.dateFormatter) let versionDate = Date().relativeDateString(since: latestSupportedVersion.date)
cell.bannerView.subtitleLabel.text = versionDate cell.bannerView.subtitleLabel.text = versionDate
let appName: String let appName: String

View File

@@ -10,6 +10,13 @@ import Foundation
public extension Date public extension Date
{ {
private static let mediumDateFormatter: DateFormatter = {
let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .medium
dateFormatter.timeStyle = .none
return dateFormatter
}()
func numberOfCalendarDays(since date: Date) -> Int func numberOfCalendarDays(since date: Date) -> Int
{ {
let today = Calendar.current.startOfDay(for: self) let today = Calendar.current.startOfDay(for: self)
@@ -19,15 +26,15 @@ public extension Date
return components.day! return components.day!
} }
func relativeDateString(since date: Date, dateFormatter: DateFormatter) -> String func relativeDateString(since date: Date, dateFormatter: DateFormatter? = nil) -> String
{ {
let dateFormatter = dateFormatter ?? Date.mediumDateFormatter
let numberOfDays = self.numberOfCalendarDays(since: date) let numberOfDays = self.numberOfCalendarDays(since: date)
switch numberOfDays switch numberOfDays
{ {
case 0: return NSLocalizedString("Today", comment: "") case 0: return NSLocalizedString("Today", comment: "")
case 1: return NSLocalizedString("Yesterday", comment: "") case 1: return NSLocalizedString("Yesterday", comment: "")
case 2...7: return String(format: NSLocalizedString("%@ days ago", comment: ""), NSNumber(value: numberOfDays))
default: return dateFormatter.string(from: date) default: return dateFormatter.string(from: date)
} }
} }