Description
current version:
private readonly string defaultFormat = "yyyy-MM-dd";
new version:
private readonly string defaultFormat = CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern;
[Parameter]
public string? Format
{
get => _format ??= Culture.DateTimeFormat.ShortDatePattern;
set
{
if (_format == value) return;
_format = value ?? Culture.DateTimeFormat.ShortDatePattern;
}
}
protected void OnKeyDown(KeyboardEventArgs e)
{
_preventDefault = e.Key == "Enter" ? PreventEnter ?? false : false;
if (e.Key == "ArrowUp" || e.Key == "ArrowDown")
{
var increment = e.Key == "ArrowUp" ? TimeSpan.FromMinutes(1) : TimeSpan.FromMinutes(-1);
if (Value is DateTime dt) Value = (TValue)(object)(dt + increment);
else if (Value is DateOnly d) Value = (TValue)(object)(d.AddDays((int)increment.TotalDays));
}
}
/// <summary>
/// Formats the supplied value to it's valid string representation.
/// </summary>
/// <param name="value">Value to format.</param>
/// <param name="dateFormat">Date format.</param>
/// <returns>Returns value formatted as string.</returns>
public static string FormatDateValueAsString<TValue>( TValue value, string dateFormat )
{
return value switch
{
null => null,
DateTime datetime => datetime.ToString( dateFormat ),
DateTimeOffset datetimeOffset => datetimeOffset.ToString( dateFormat ),
DateOnly dateOnly => dateOnly.ToString( dateFormat ),
_ => throw new InvalidOperationException( $"Unsupported type {value.GetType()}" ),
};
}