Example of handling week number
<?php $date_str = '2010-01-01'; print_r("$date_str <br>"); $date = new DateTime($date_str); $date_y = $date->format('Y'); $date_W = $date->format('W'); print_r("$date_y $date_W <- This expression is wrong <br>"); print_r("-----<br>"); $date->sub(new DateInterval('P1D')); $date_y = $date->format('Y'); $date_W = $date->format('W'); print_r("$date_y $date_W<br>"); // correct expression $date->add(new DateInterval('P1D')); // rewind $date->add(new DateInterval('P3D')); $date_y = $date->format('Y'); $date_m = $date->format('m'); $date_W = $date->format('W'); print_r("$date_y $date_W<br>"); $date = (new DateTime())->setISODate($date_y, $date_W); // assign with (year, week) $date_s = $date->format('Y-m-d'); // start day of week (monday) $date->add(new DateInterval('P6D')); $date_e = $date->format('Y-m-d'); // end day of week (sunday) print_r("$date_s ~ $date_e<br>"); $date_str = '2010-02-01'; print_r("$date_str <br>"); $date = new DateTime($date_str); $date_y = $date->format('Y'); $date_m = $date->format('m'); $date_W = $date->format('W'); // Week number of this month, using 04 is due to ISO_8601. $date_mW = $date_W - date('W', strtotime("$date_y-$date_m-04")) + 1; print_r("$date_W $date_mW");
2010-01-01 2010 53 <- This expression is wrong ----- 2009 53 2010 01 2010-01-04 ~ 2010-01-10 2010-02-01 05 1