I have this PHP code:
$monthNum = sprintf("%02s", $result["month"]);
$monthName = date("F", strtotime($monthNum));
echo $monthName;
But it's returning December
rather than August
.
$result["month"]
is equal to 8, so the sprintf
function is adding a 0
to make it 08
.
Am currently using the solution below to tackle the same issue:
To read more about set locale go to http://php.net/manual/en/function.setlocale.php
To learn more about strftime go to http://php.net/manual/en/function.strftime.php
Ucfirst()
is used to capitalize the first letter in a string.To do the conversion in respect of the current locale, you can use the
strftime
function:date
doesn't respect the locale,strftime
does.Just because everyone is using strtotime() and date() functions, I will show DateTime example:
strtotime
expects a standard date format, and passes back a timestamp.You seem to be passing
strtotime
a single digit to output a date format from.You should be using
mktime
which takes the date elements as parameters.Your full code:
However, the mktime function does not require a leading zero to the month number, so the first line is completely unnecessary, and
$result["month"]
can be passed straight into the function.This can then all be combined into a single line, echoing the date inline.
Your refactored code:
...
The recommended way to do this:
Nowadays, you should really be using DateTime objects for any date/time math. This requires you to have a PHP version >= 5.2. As shown in Glavić's answer, you can use the following:
The
!
formatting character is used to reset everything to the Unix epoch. Them
format character is the numeric representation of a month, with leading zeroes.Alternative solution:
If you're using an older PHP version and can't upgrade at the moment, you could this solution. The second parameter of
date()
function accepts a timestamp, and you could usemktime()
to create one, like so:If you want the 3-letter month name like
Mar
, changeF
toM
. The list of all available formatting options can be found in the PHP manual documentation.Use a native function such as
jdmonthname()
: