I have an array of random dates (not coming from MySQL). I need to group them by the week as Week1, Week2, and so on upto Week5.
What I have is this:
$dates = array('2015-09-01','2015-09-05','2015-09-06','2015-09-15','2015-09-17');
What I need is a function to get the week number of the month by providing the date.
I know that I can get the weeknumber by doing
date('W',strtotime('2015-09-01'));
but this week number is the number between year (1-52) but I need the week number of the month only, e.g. in Sep 2015 there are 5 weeks:
- Week1 = 1st to 5th
- Week2 = 6th to 12th
- Week3 = 13th to 19th
- Week4 = 20th to 26th
- Week5 = 27th to 30th
I should be able to get the week Week1 by just providing the date e.g.
$weekNumber = getWeekNumber('2015-09-01') //output 1;
$weekNumber = getWeekNumber('2015-09-17') //output 3;
I think this relationship should be true and come in handy:
We also need to make sure that "overlapping" weeks from the previous year are handeled correctly - if January 1st is in week 52 or 53, it should be counted as week 0. (A previous version of this answer failed to do this.)
To get weeks that starts with sunday, simply replace
date("W", ...)
withstrftime("%U", ...)
.