Closed jpm04021 closed 6 months ago
Looks fine to me. As per the docs, weeks start on a Monday, so everything up until the first Monday of a year will be in the last week of the previous year:
<?php
$date = new DateTime('noon Dec 24, 2026');
$days = 21;
while($days--) {
$date->modify('+1 day');
$tdate = $date->format('H:i D M d, Y');
$week = $date->format('W');
echo "$tdate - Week Number: " . (int) $week . "\n";
}
Output:
12:00 Fri Dec 25, 2026 - Week Number: 52
12:00 Sat Dec 26, 2026 - Week Number: 52
12:00 Sun Dec 27, 2026 - Week Number: 52
12:00 Mon Dec 28, 2026 - Week Number: 53
12:00 Tue Dec 29, 2026 - Week Number: 53
12:00 Wed Dec 30, 2026 - Week Number: 53
12:00 Thu Dec 31, 2026 - Week Number: 53
12:00 Fri Jan 01, 2027 - Week Number: 53
12:00 Sat Jan 02, 2027 - Week Number: 53
12:00 Sun Jan 03, 2027 - Week Number: 53
12:00 Mon Jan 04, 2027 - Week Number: 1
12:00 Tue Jan 05, 2027 - Week Number: 1
12:00 Wed Jan 06, 2027 - Week Number: 1
12:00 Thu Jan 07, 2027 - Week Number: 1
12:00 Fri Jan 08, 2027 - Week Number: 1
12:00 Sat Jan 09, 2027 - Week Number: 1
12:00 Sun Jan 10, 2027 - Week Number: 1
12:00 Mon Jan 11, 2027 - Week Number: 2
12:00 Tue Jan 12, 2027 - Week Number: 2
12:00 Wed Jan 13, 2027 - Week Number: 2
12:00 Thu Jan 14, 2027 - Week Number: 2
// Note: this function should be using / reporting on the 1st day of the week when generating the week #, instead of the // 2nd day of the week $tdate = '2023-12-10'; $date = new DateTime( $tdate ); $week = $date->format('W'); echo "$tdate - Week Number: " . (int) $week . '
';
// The format('W') function works OK for dates thru 2027-01-02 // However, on date 2027-01-03 and on, this function repeats week 1 again (and it loses 1 week going forward)