Getting Dates From Week Numbers in PHP

Recently I've been building a little project that pulls data from Google Analytics and shows your web statistics in a simple form. One thing I wanted to do was show the data for a quarter, but graphing by day is too chaotic and graphing by month only gives three points, so I wanted to graph by week. This was fine but the data returned by Analytics only gives me the week numbers, and since this project is aimed at demystifying web stats for normal people, it really needs normal dates on it!

Using DateTime::setISODate

I found that the DateTime extension has a method setISODate() which accepts the year and week number, and makes a date you can then use as normal.

$week_start = new DateTime();
$week_start->setISODate($year,$week_no);
echo $week_start->format('d-M-Y');

You can also do this the other way around; if you have a date in PHP, there's the 'W' flag for date() which will return you the week number - very handy!

8 thoughts on “Getting Dates From Week Numbers in PHP

  1. The DateTime class is fabulous - it is a nice interface to essentially complicated problems. It annoys me though that so few people seem to use it.

  2. Hello, nice article. I am new in php so could you please explain how can i do this the other way around. Because if i understood correctly i cannot do it with "method setISODate()". I tried to add extra variable "date" but it didnt returned me a week. Thanks!

  3. If you are creating a date by putting together a year and week number, then you would use the method above. To get the week number of a date, you can do DateTime::format (or just plain date()) and use the 'W' as the format.

Leave a Reply

Please use [code] and [/code] around any source code you wish to share.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>