chore: update timestamp style. Only display time ago style in one week

This commit is contained in:
CMK 2022-05-23 12:09:44 +08:00
parent 250de39972
commit 2878134551
1 changed files with 27 additions and 4 deletions

View File

@ -11,6 +11,8 @@ import MastodonLocalization
extension Date {
static let calendar = Calendar(identifier: .gregorian)
public static let relativeTimestampFormatter: RelativeDateTimeFormatter = {
let formatter = RelativeDateTimeFormatter()
formatter.dateTimeStyle = .numeric
@ -18,8 +20,15 @@ extension Date {
return formatter
}()
public static let abbreviatedDateFormatter: DateFormatter = {
let formatter = DateFormatter()
formatter.dateStyle = .medium // e.g. Nov 23, 1937
formatter.timeStyle = .none // none
return formatter
}()
public var localizedSlowedTimeAgoSinceNow: String {
return self.localizedTimeAgo(since: Date(), isSlowed: true, isAbbreviated: true)
return self.localizedTimeAgo(since: Date(), isSlowed: true, isAbbreviated: false)
}
public var localizedTimeAgoSinceNow: String {
@ -36,7 +45,21 @@ extension Date {
if isAbbreviated {
return latestDate.localizedShortTimeAgo(since: earlierDate)
} else {
return Date.relativeTimestampFormatter.localizedString(for: earlierDate, relativeTo: latestDate)
if earlierDate.timeIntervalSince(latestDate) < -(7 * 24 * 60 * 60) {
let currentYear = Date.calendar.dateComponents([.year], from: Date())
let earlierDateYear = Date.calendar.dateComponents([.year], from: earlierDate)
if #available(iOS 15.0, *) {
if currentYear.year! > earlierDateYear.year! {
return earlierDate.formatted(.dateTime.year().month(.abbreviated).day())
} else {
return earlierDate.formatted(.dateTime.month(.abbreviated).day())
}
} else {
return Date.abbreviatedDateFormatter.string(from: earlierDate)
}
} else {
return Date.relativeTimestampFormatter.localizedString(for: earlierDate, relativeTo: latestDate)
}
}
}
}
@ -49,7 +72,7 @@ extension Date {
let earlierDate = date < self ? date : self
let latestDate = earlierDate == date ? self : date
let components = Calendar.current.dateComponents([.year, .month, .day, .hour, .minute, .second], from: earlierDate, to: latestDate)
let components = Date.calendar.dateComponents([.year, .month, .day, .hour, .minute, .second], from: earlierDate, to: latestDate)
if components.year! > 0 {
return L10n.Date.Year.Ago.abbr(components.year!)
@ -73,7 +96,7 @@ extension Date {
let earlierDate = date < self ? date : self
let latestDate = earlierDate == date ? self : date
let components = Calendar.current.dateComponents([.year, .month, .day, .hour, .minute, .second], from: earlierDate, to: latestDate)
let components = Calendar(identifier: .gregorian).dateComponents([.year, .month, .day, .hour, .minute, .second], from: earlierDate, to: latestDate)
if components.year! > 0 {
return L10n.Date.Year.left(components.year!)