feat: add Persian calendar support for week numbers and dates
All checks were successful
Build and Deploy to Kubernetes / build-and-deploy (push) Successful in 6m35s
All checks were successful
Build and Deploy to Kubernetes / build-and-deploy (push) Successful in 6m35s
This commit is contained in:
@@ -87,7 +87,16 @@ public class GetAvailableWeeksQueryHandler : IRequestHandler<GetAvailableWeeksQu
|
||||
var log = executionLogs.GetValueOrDefault(weekNumber);
|
||||
|
||||
var isCalculated = pool != null && pool.IsCalculated;
|
||||
var displayText = $"{weekNumber} ({startDate:yyyy/MM/dd} - {endDate:yyyy/MM/dd})";
|
||||
|
||||
// تبدیل weekNumber به شمسی
|
||||
var persianWeekNumber = ConvertWeekNumberToPersian(weekNumber, startDate);
|
||||
|
||||
// تبدیل تاریخ به شمسی برای نمایش
|
||||
var persianCalendar = new PersianCalendar();
|
||||
var startDatePersian = $"{persianCalendar.GetYear(startDate):D4}/{persianCalendar.GetMonth(startDate):D2}/{persianCalendar.GetDayOfMonth(startDate):D2}";
|
||||
var endDatePersian = $"{persianCalendar.GetYear(endDate):D4}/{persianCalendar.GetMonth(endDate):D2}/{persianCalendar.GetDayOfMonth(endDate):D2}";
|
||||
|
||||
var displayText = $"{persianWeekNumber} ({startDatePersian} - {endDatePersian})";
|
||||
|
||||
if (isCalculated)
|
||||
{
|
||||
@@ -96,7 +105,7 @@ public class GetAvailableWeeksQueryHandler : IRequestHandler<GetAvailableWeeksQu
|
||||
|
||||
return new WeekInfoDto
|
||||
{
|
||||
WeekNumber = weekNumber,
|
||||
WeekNumber = persianWeekNumber, // شمسی
|
||||
StartDate = startDate,
|
||||
EndDate = endDate,
|
||||
IsCalculated = isCalculated,
|
||||
@@ -152,4 +161,33 @@ public class GetAvailableWeeksQueryHandler : IRequestHandler<GetAvailableWeeksQu
|
||||
|
||||
return (startDate, endDate);
|
||||
}
|
||||
|
||||
private static string ConvertWeekNumberToPersian(string gregorianWeekNumber, DateTime weekStartDate)
|
||||
{
|
||||
// ورودی: "2025-W48"
|
||||
var persianCalendar = new PersianCalendar();
|
||||
var persianYear = persianCalendar.GetYear(weekStartDate);
|
||||
|
||||
// محاسبه شماره هفته شمسی
|
||||
var jan1Persian = persianCalendar.ToDateTime(persianYear, 1, 1, 0, 0, 0, 0);
|
||||
|
||||
// پیدا کردن اولین شنبه سال شمسی
|
||||
var jan1DayOfWeek = (int)jan1Persian.DayOfWeek;
|
||||
var daysToFirstSaturday = jan1DayOfWeek == 6 ? 0 : (6 - jan1DayOfWeek + 7) % 7;
|
||||
var firstSaturday = jan1Persian.AddDays(daysToFirstSaturday);
|
||||
|
||||
// محاسبه شماره هفته
|
||||
int weekNum;
|
||||
if (weekStartDate < firstSaturday)
|
||||
{
|
||||
weekNum = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
var daysSinceFirstSaturday = (weekStartDate - firstSaturday).Days;
|
||||
weekNum = (daysSinceFirstSaturday / 7) + 1;
|
||||
}
|
||||
|
||||
return $"{persianYear}-W{weekNum:D2}";
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user