Extract date rendering into per-feature Date components
This commit is contained in:
1 parent
d95bf0dcbe
commit
455b603299
16 files changed
+168
-71
No files matched your search
@@ -0,0 +1,55 @@
|
||||
using System.Globalization;
|
||||
using Elternbeirat.Web.Shared;
|
||||
|
||||
namespace Elternbeirat.Web.Features.Posts;
|
||||
|
||||
/// <summary>
|
||||
/// Formats a post's calendar day for display and for a machine-readable
|
||||
/// <c>datetime</c> attribute.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Posts carry a <see cref="DateOnly"/> (a calendar day, no time of day). Their
|
||||
/// <c><time></c> element needs the day twice: once in German for the
|
||||
/// visitor (<see cref="Display"/>) and once as ISO 8601 for the <c>datetime</c>
|
||||
/// attribute (<see cref="Iso"/>). Keeping both here means the two never drift
|
||||
/// apart and the markup no longer repeats the same <c>ToString</c> pair.
|
||||
/// <para>
|
||||
/// This is the post counterpart to
|
||||
/// <see cref="Events.EventDateFormat"/>, which formats a
|
||||
/// <see cref="System.DateTime"/> range instead.
|
||||
/// </para>
|
||||
/// </remarks>
|
||||
public static class PostDateFormat
|
||||
{
|
||||
/// <summary>
|
||||
/// Display format for a calendar day, e.g. <c>8. Oktober 2026</c>. The
|
||||
/// weekday is omitted, unlike the event format.
|
||||
/// </summary>
|
||||
private const string LongDate = "d. MMMM yyyy";
|
||||
|
||||
/// <summary>
|
||||
/// Formats a calendar day in German for a visitor to read.
|
||||
/// </summary>
|
||||
/// <param name="value">
|
||||
/// The calendar day to format.
|
||||
/// </param>
|
||||
/// <returns>
|
||||
/// The day as e.g. <c>8. Oktober 2026</c>, using German month names.
|
||||
/// </returns>
|
||||
public static string Display(DateOnly value)
|
||||
=> value.ToString(LongDate, Cultures.German);
|
||||
|
||||
/// <summary>
|
||||
/// Formats a calendar day as ISO 8601 (<c>yyyy-MM-dd</c>) for a
|
||||
/// machine-readable <c>datetime</c> attribute.
|
||||
/// </summary>
|
||||
/// <param name="value">
|
||||
/// The calendar day to format.
|
||||
/// </param>
|
||||
/// <returns>
|
||||
/// The day as e.g. <c>2026-10-08</c>, culture-invariant so the value is
|
||||
/// stable regardless of the request's culture.
|
||||
/// </returns>
|
||||
public static string Iso(DateOnly value)
|
||||
=> value.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture);
|
||||
}
|
||||
Reference in new issue
Block a user