function get_week_of_year() { $day = $this->day; $month = $this->month; $year = $this->year; $mnth = array(0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334); $y_isleap = $this->is_leap_year(); $d = new date($this); $d->set_year($this->year - 1); $y_1_isleap = $d->is_leap_year(); $day_of_year_number = $day + $mnth[$month - 1]; if ($y_isleap && $month > 2) { $day_of_year_number++; } // find Jan 1 weekday (monday = 1, sunday = 7) $yy = ($year - 1) % 100; $c = $year - 1 - $yy; $g = $yy + intval($yy / 4); $jan1_weekday = 1 + intval(($c / 100 % 4 * 5 + $g) % 7); // weekday for year-month-day $h = $day_of_year_number + ($jan1_weekday - 1); $weekday = 1 + intval(($h - 1) % 7); // find if Y M D falls in YearNumber Y-1, WeekNumber 52 or if ($day_of_year_number <= 8 - $jan1_weekday && $jan1_weekday > 4) { $yearnumber = $year - 1; if ($jan1_weekday == 5 || $jan1_weekday == 6 && $y_1_isleap) { $weeknumber = 53; } else { $weeknumber = 52; } } else { $yearnumber = $year; } // find if Y M D falls in YearNumber Y+1, WeekNumber 1 if ($yearnumber == $year) { if ($y_isleap) { $i = 366; } else { $i = 365; } if ($i - $day_of_year_number < 4 - $weekday) { $yearnumber++; $weeknumber = 1; } } // find if Y M D falls in YearNumber Y, WeekNumber 1 through 53 if ($yearnumber == $year) { $j = $day_of_year_number + (7 - $weekday) + ($jan1_weekday - 1); $weeknumber = intval($j / 7); // kludge!!! - JMC if ($jan1_weekday > 4) { $weeknumber--; } } return $weeknumber; }