Convert month name to month number in php

While working with a CJ run reports script i needed to convert “month name” into “month number” so i could store it in the database in date format. After doing some cleaning stuff i was ending with the month name, a three character string as “Jan”,”Mar”,”Apr” etc. Here is the quick work around i applied to get the month number automatically from the month name.

$month_name = "Jan"; //which i get from file name (Range_from_1_Jan_2009_to_3_Mar_2009.txt)
$month_number = "";

	if(strtolower(date("M", mktime(0, 0, 0, $i, 1, 0))) == strtolower($month_name)){
		$month_number = $i;

Now as php snippet code line 5 date(“M”, mktime(0, 0, 0, 1, 1, 0))) returns a three letter represantion of month name i get month “1” if i pass $month_name=”Jan” and so on. If i had full month name like “January” i could make it work by replacing “M” with “F” where “F” format parameter is a full represantion of year name.

Special Note: Do not forget to see user comments down the page to find even smarter solutions :)

10 thoughts on “Convert month name to month number in php

  1. All very well but you can do it in a single line without any need for programming loops….

    $monthname ="September"; //insert usercode here
    $monthnum = date("n", strtotime("01-".$monthname."-2011 00:00:00"));

    Will work for 3-letter short names as well as full names. The day year and time in the code is irrelevant as you are just extracting the month info.

    Hope that helps.

  2. Great bit of code! Much better than using an array of the months.
    One point:

    “for($i=1;$i< =12;$i++){ ”

    shouldn’t have a space between “<” and “=”, so should be:



    1. @Dan Price – Thanks for pointing this out. Fixed. In fact my wp post editor had not been saving the space between < and =. I wrote HTML equivalent for "<" i.e. "&lt;" this time and it worked! Thanks again!

  3. “if(strtolower(date(“M”, mktime(0, 0, 0, $i, 1, 0))) == strtolower($month)){ ”

    here “strtolower($month)” shoulb be strtolower($month_name)

Leave a Reply