| File: FormatWeekHelper.cs | Web Access |
| Project: src\aspnetcore\src\Mvc\Mvc.ViewFeatures\src\Microsoft.AspNetCore.Mvc.ViewFeatures.csproj (Microsoft.AspNetCore.Mvc.ViewFeatures) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Globalization; namespace Microsoft.AspNetCore.Mvc.ViewFeatures; internal static class FormatWeekHelper { public static string GetFormattedWeek(ModelExplorer modelExplorer) { var value = modelExplorer.Model; if (value is DateTimeOffset dateTimeOffset) { value = dateTimeOffset.DateTime; } if (value is DateTime date) { var calendar = Thread.CurrentThread.CurrentCulture.Calendar; var day = calendar.GetDayOfWeek(date); // Get the week number consistent with ISO 8601. See blog post: // https://blogs.msdn.microsoft.com/shawnste/2006/01/24/iso-8601-week-of-year-format-in-microsoft-net/ if (day >= DayOfWeek.Monday && day <= DayOfWeek.Wednesday) { date = date.AddDays(3); } var week = calendar.GetWeekOfYear(date, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday); var year = calendar.GetYear(date); var month = calendar.GetMonth(date); // Last week (either 52 or 53) includes January dates (1st, 2nd, 3rd) if (week >= 52 && month == 1) { year--; } // First week includes December dates (29th, 30th, 31st) if (week == 1 && month == 12) { year++; } return $"{year:0000}-W{week:00}"; } return null; } }