Create page from post

This commit is contained in:
Christoph Hagen
2025-01-18 12:02:06 +01:00
parent 1d4b3c266c
commit 51eff690d2
7 changed files with 88 additions and 24 deletions

View File

@ -6,35 +6,42 @@ protocol DateItem {
var hasEndDate: Bool { get }
var endDate: Date { get }
var potentialEndDate: Date { get }
}
extension DateItem {
private func datePrefixString(in language: ContentLanguage) -> String {
guard Calendar.current.isDate(startDate, equalTo: endDate, toGranularity: .year) else {
// Different year, return full string
return DateItemStorage.dateString(for: startDate, in: language)
}
guard Calendar.current.isDate(startDate, equalTo: endDate, toGranularity: .month) else {
// Different month
return DateItemStorage.dayAndMonth(of: startDate, in: language)
}
return DateItemStorage.day.string(from: startDate)
var endDate: Date? {
hasEndDate ? potentialEndDate : nil
}
func dateText(in language: ContentLanguage) -> String {
guard hasEndDate else {
guard let endDate else {
return DateItemStorage.dateString(for: startDate, in: language)
}
let endText = DateItemStorage.dateString(for: endDate, in: language)
return "\(datePrefixString(in: language)) - \(endText)"
let endText = DateItemStorage.dateString(for: potentialEndDate, in: language)
let prefix = DateItemStorage.datePrefixString(from: startDate, to: endDate, in: language)
return prefix + " - " + endText
}
}
private enum DateItemStorage {
static func datePrefixString(from start: Date, to end: Date, in language: ContentLanguage) -> String {
guard Calendar.current.isDate(start, equalTo: end, toGranularity: .year) else {
// Different year, return full string
return DateItemStorage.dateString(for: start, in: language)
}
guard Calendar.current.isDate(start, equalTo: end, toGranularity: .month) else {
// Different month
return DateItemStorage.dayAndMonth(of: start, in: language)
}
return DateItemStorage.day.string(from: start)
}
static let englishDate: DateFormatter = {
let df = DateFormatter()
df.locale = .init(identifier: "en")