calculateWeekNumber method
int
calculateWeekNumber(
- dynamic date
)
Implementation
int calculateWeekNumber(var date) {
DateTime firstDayOfYear = DateTime(date.year, 1, 1);
// Find the first Thursday of the year
int firstThursdayOffset = (4 - firstDayOfYear.weekday + 7) % 7;
DateTime firstThursday =
firstDayOfYear.add(Duration(days: firstThursdayOffset));
// Calculate the difference in days from the first Thursday
int daysSinceFirstThursday = date.difference(firstThursday).inDays;
// Calculate the week number
int weekNumber = (daysSinceFirstThursday ~/ 7) + 1;
// If the date is before the first Thursday, it's part of the last week of the previous year
if (weekNumber <= 0) {
weekNumber = calculateWeekNumber(DateTime(date.year - 1, 12, 31));
}
// If the week number exceeds 52/53, adjust to 1 for the new year
DateTime lastDayOfYear = DateTime(date.year, 12, 31);
if (weekNumber > 52 && lastDayOfYear.weekday < 4) {
weekNumber = 1;
}
return weekNumber;
}