calculateWeekNumber method

int calculateWeekNumber(
  1. 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;
}