Reputation: 3225
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
.
Upvotes: 193
Views: 482132
Reputation: 1411
IntlDateFormatter::format
To do the conversion in respect of a specific locale, you can use the IntlDateFormatter
class:
function getMonthName ($locale, $monthNumber) {
$formatter = new IntlDateFormatter($locale);
$formatter->setPattern('MMMM');
return $formatter->format(mktime(0, 0, 0, $monthNumber));
}
$monthName = getMonthName('fr_FR', 8); // août
This requires the intl extension. The class is available in PHP 5.3.0+.
Historical - before PHP 8.1.0
Before the IntlDateFormatter class, the strftime
function was used. This function has been deprecated in PHP 8.1.0.
To do the conversion in respect of the current locale, you can use the strftime
function:
setlocale(LC_TIME, 'fr_FR.UTF-8');
$monthName = strftime('%B', mktime(0, 0, 0, $monthNumber));
date
doesn't respect the locale, strftime
does.
Upvotes: 29
Reputation: 79
My approach
$month = date('m');
$months_of_year = array(
array('month' => '01', 'translation' => 'janeiro'),
array('month' => '02', 'translation' => 'fevereiro'),
array('month' => '03', 'translation' => 'março'),
array('month' => '04', 'translation' => 'abril'),
array('month' => '05', 'translation' => 'maio'),
array('month' => '06', 'translation' => 'junho'),
array('month' => '07', 'translation' => 'julho'),
array('month' => '08', 'translation' => 'agosto'),
array('month' => '09', 'translation' => 'setembro'),
array('month' => '10', 'translation' => 'outubro'),
array('month' => '11', 'translation' => 'novembro'),
array('month' => '12', 'translation' => 'dezembro'),
);
$current_month = '';
foreach ($months_of_year as $key => $value)
{
if ($value['month'] == $month){
$current_month = $value['translation'];
break;
}
}
echo("mes:" . $current_month);
Upvotes: -1
Reputation: 382
This respect the LC_TIME
$date = new DateTime('2022-04-05');
$mes = strftime('%B', $date->getTimestamp());
Upvotes: 0
Reputation: 121
If you have the month number, you can first create a date from it with a default date of 1st and default year of the current year, then extract the month name from the date created:
echo date("F", strtotime(date("Y") ."-". $i ."-01"))
This code assumes you have your month number stored in $i
Upvotes: 12
Reputation: 1228
You can do it in just one line:
DateTime::createFromFormat('!m', $salary->month)->format('F'); //April
Upvotes: 4
Reputation: 21
$days = ['', 'Jan', 'Feb', 'Mar', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
$month = ( date('m') < 10 ) ? date('m')[1] : date('m');
That extracts the months.
Upvotes: 2
Reputation: 2103
A simple tricks here you can use strtotime() function workable as per your need, a convert number to month name.
1.If you want a result in Jan, Feb and Mar Then try below one with the 'M' as a parameter inside the date.
$month=5;
$nmonth = date('M',strtotime("01-".$month."-".date("Y")));
echo $nmonth;
Output : May
/2. You can try with the 'F' instead of 'M' to get the full month name as an output January February March etc.
$month=1;
$nmonth = date('M',strtotime("01-".$month."-".date("Y")));
echo $nmonth;
Output : January
Upvotes: 1
Reputation: 3615
There are many ways to print a month from the given number. Pick one suite for you.
1. date() function along with parameter 'F'
Code example:
$month_num = 10;
echo date("F", mktime(0, 0, 0, $month_num, 10)); //output: October
2. By creating php date object using createFromFormat()
Code Example
$dateObj = DateTime::createFromFormat('!m', $monthNum);
echo "month name: ".$dateObj->format('F'); // Output: October
3. strtotime() function
echo date("F", strtotime('00-'.$monthNum.'-01')); // Output: October
4. mktime() function
echo date("F", mktime(null, null, null, $monthNum)); // Output: October
5. By using jdmonthname()
$jd=gregoriantojd($monthNum,10,2019);
echo jdmonthname($jd,0); // Output: Oct
Upvotes: 14
Reputation: 10975
This is how I did it
// sets Asia/Calcutta time zone
date_default_timezone_set("Asia/Calcutta");
//fetches current date and time
$date = date("Y-m-d H:i:s");
$dateArray = date_parse_from_format('Y/m/d', $date);
$month = DateTime::createFromFormat('!m', $dateArray['month'])->format('F');
$dateString = $dateArray['day'] . " " . $month . " " . $dateArray['year'];
echo $dateString;
returns 30 June 2019
Upvotes: 0
Reputation: 438
This for all needs of date-time converting
<?php
$newDate = new DateTime('2019-03-27 03:41:41');
echo $newDate->format('M d, Y, h:i:s a');
?>
Upvotes: 2
Reputation: 1263
$monthNum = 5;
$monthName = date("F", mktime(0, 0, 0, $monthNum, 10));
I found this on https://css-tricks.com/snippets/php/change-month-number-to-month-name/ and it worked perfectly.
Upvotes: 7
Reputation: 121
Am currently using the solution below to tackle the same issue:
//set locale,
setlocale(LC_ALL,"US");
//set the date to be converted
$date = '2016-08-07';
//convert date to month name
$month_name = ucfirst(strftime("%B", strtotime($date)));
echo $month_name;
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.
Upvotes: 2
Reputation: 2546
this is trivially easy, why are so many people making such bad suggestions? @Bora was the closest, but this is the most robust
/***
* returns the month in words for a given month number
*/
date("F", strtotime(date("Y")."-".$month."-01"));
this is the way to do it
Upvotes: 2
Reputation: 5043
adapt as required
$m='08';
$months = array (1=>'Jan',2=>'Feb',3=>'Mar',4=>'Apr',5=>'May',6=>'Jun',7=>'Jul',8=>'Aug',9=>'Sep',10=>'Oct',11=>'Nov',12=>'Dec');
echo $months[(int)$m];
Upvotes: 10
Reputation: 21899
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.
$monthNum = sprintf("%02s", $result["month"]);
$monthName = date("F", mktime(null, null, null, $monthNum));
echo $monthName;
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.
echo date("F", mktime(null, null, null, $result["month"], 1));
...
Upvotes: 22
Reputation: 2807
Use:
$name = jdmonthname(gregoriantojd($monthNumber, 1, 1), CAL_MONTH_GREGORIAN_LONG);
Upvotes: -1
Reputation: 13
I think using cal_info() is the easiest way to convert from number to string.
$monthNum = sprintf("%02s", $result["month"]); //Returns `08`
$monthName = cal_info(0); //Returns Gregorian (Western) calendar array
$monthName = $monthName[months][$monthNum];
echo $monthName; //Returns "August"
See the docs for cal_info()
Upvotes: 0
Reputation: 522
If you just want an array of month names from the beginning of the year to the end e.g. to populate a drop-down select, I would just use the following;
for ($i = 0; $i < 12; ++$i) {
$months[$m] = $m = date("F", strtotime("January +$i months"));
}
Upvotes: 10
Reputation: 1103
Use mktime()
:
<?php
$monthNum = 5;
$monthName = date("F", mktime(0, 0, 0, $monthNum, 10));
echo $monthName; // Output: May
?>
See the PHP manual : http://php.net/mktime
Upvotes: 39
Reputation: 76646
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:
$monthNum = 3;
$dateObj = DateTime::createFromFormat('!m', $monthNum);
$monthName = $dateObj->format('F'); // March
The !
formatting character is used to reset everything to the Unix epoch. The m
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 use mktime()
to create one, like so:
$monthNum = 3;
$monthName = date('F', mktime(0, 0, 0, $monthNum, 10)); // March
If you want the 3-letter month name like Mar
, change F
to M
. The list of all available formatting options can be found in the PHP manual documentation.
Upvotes: 431
Reputation: 43552
Just because everyone is using strtotime() and date() functions, I will show DateTime example:
$dt = DateTime::createFromFormat('!m', $result['month']);
echo $dt->format('F');
Upvotes: 44
Reputation: 10717
You need set fields with strtotime
or mktime
echo date("F", strtotime('00-'.$result["month"].'-01'));
With mktime
set only month. Try this one:
echo date("F", mktime(0, 0, 0, $result["month"], 1));
Upvotes: 2