Use user’s timezone for blog post time

This commit is contained in:
Otávio Cordeiro 2025-12-24 16:28:13 +01:00 committed by Otávio
parent e1098916ab
commit 5e0ad765e1
3 changed files with 40 additions and 19 deletions

View file

@ -6,17 +6,19 @@ public extension DateFormatter {
///
/// This formatter produces ISO 8601 compatible date strings with short time
/// format, specifically designed for use in weblog entry frontmatter. The
/// formatter uses GMT+0 timezone and POSIX locale for consistent formatting
/// formatter uses the user timezone and POSIX locale for consistent formatting
/// across different system configurations.
///
/// Output format: `YYYY-MM-DD HH:MM`
///
/// Example: `2024-03-15 14:30`
static let iso8601WithShortTime: DateFormatter = {
static func iso8601WithShortTime(
timeZone: TimeZone
) -> DateFormatter {
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd HH:mm"
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.timeZone = TimeZone(secondsFromGMT: 0)
formatter.timeZone = timeZone
return formatter
}()
}
}

View file

@ -21,16 +21,21 @@ public extension String {
///
/// - Parameters:
/// - date: The publication date to include in the frontmatter
/// - timeZone: The timezone used for the publication (defaults to user's current timezone)
/// - status: The publication status to include in the frontmatter (e.g., "Draft", "Live", "Feed Only", "Web
/// Only", "Unlisted")
/// - tags: An array of tags to include in the frontmatter. Tags are comma-separated.
/// - Returns: UTF-8 encoded data containing the formatted weblog entry body
func weblogEntryBody(
date: Date,
timeZone: TimeZone = .current,
status: String,
tags: [String]
) -> Data {
let formattedString = DateFormatter.iso8601WithShortTime.string(from: date)
let formattedString = DateFormatter
.iso8601WithShortTime(timeZone: timeZone)
.string(from: date)
var frontmatter = """
---
Date: \(formattedString)

View file

@ -22,8 +22,9 @@ struct StringWeblogTests {
"""
// When
let result = content.weblogEntryBody(
let result = try content.weblogEntryBody(
date: date,
timeZone: #require(TimeZone(secondsFromGMT: 0)),
status: status,
tags: tags
)
@ -57,8 +58,9 @@ struct StringWeblogTests {
"""
// When
let result = content.weblogEntryBody(
let result = try content.weblogEntryBody(
date: date,
timeZone: #require(TimeZone(secondsFromGMT: 0)),
status: status,
tags: tags
)
@ -91,8 +93,9 @@ struct StringWeblogTests {
"""
// When
let result = content.weblogEntryBody(
let result = try content.weblogEntryBody(
date: date,
timeZone: #require(TimeZone(secondsFromGMT: 0)),
status: status,
tags: tags
)
@ -125,8 +128,9 @@ struct StringWeblogTests {
"""
// When
let result = content.weblogEntryBody(
let result = try content.weblogEntryBody(
date: date,
timeZone: #require(TimeZone(secondsFromGMT: 0)),
status: status,
tags: tags
)
@ -159,8 +163,9 @@ struct StringWeblogTests {
"""
// When
let result = content.weblogEntryBody(
let result = try content.weblogEntryBody(
date: date,
timeZone: #require(TimeZone(secondsFromGMT: 0)),
status: status,
tags: tags
)
@ -194,8 +199,9 @@ struct StringWeblogTests {
"""
// When
let result = content.weblogEntryBody(
let result = try content.weblogEntryBody(
date: date,
timeZone: #require(TimeZone(secondsFromGMT: 0)),
status: status,
tags: tags
)
@ -229,8 +235,9 @@ struct StringWeblogTests {
"""
// When
let result = content.weblogEntryBody(
let result = try content.weblogEntryBody(
date: date,
timeZone: #require(TimeZone(secondsFromGMT: 0)),
status: status,
tags: tags
)
@ -265,8 +272,9 @@ struct StringWeblogTests {
"""
// When
let result = content.weblogEntryBody(
let result = try content.weblogEntryBody(
date: date,
timeZone: #require(TimeZone(secondsFromGMT: 0)),
status: status,
tags: tags
)
@ -291,8 +299,9 @@ struct StringWeblogTests {
let tags: [String] = []
// When
let result = content.weblogEntryBody(
let result = try content.weblogEntryBody(
date: date,
timeZone: #require(TimeZone(secondsFromGMT: 0)),
status: status,
tags: tags
)
@ -325,8 +334,9 @@ struct StringWeblogTests {
"""
// When
let result = content.weblogEntryBody(
let result = try content.weblogEntryBody(
date: date,
timeZone: #require(TimeZone(secondsFromGMT: 0)),
status: status,
tags: tags
)
@ -360,8 +370,9 @@ struct StringWeblogTests {
"""
// When
let result = content.weblogEntryBody(
let result = try content.weblogEntryBody(
date: date,
timeZone: #require(TimeZone(secondsFromGMT: 0)),
status: status,
tags: tags
)
@ -394,8 +405,9 @@ struct StringWeblogTests {
"""
// When
let result = content.weblogEntryBody(
let result = try content.weblogEntryBody(
date: date,
timeZone: #require(TimeZone(secondsFromGMT: 0)),
status: status,
tags: tags
)
@ -429,8 +441,9 @@ struct StringWeblogTests {
"""
// When
let result = content.weblogEntryBody(
let result = try content.weblogEntryBody(
date: date,
timeZone: #require(TimeZone(secondsFromGMT: 0)),
status: status,
tags: tags
)
@ -465,8 +478,9 @@ struct StringWeblogTests {
"""
// When
let result = content.weblogEntryBody(
let result = try content.weblogEntryBody(
date: date,
timeZone: #require(TimeZone(secondsFromGMT: 0)),
status: status,
tags: tags
)