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
.
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 .
Just because everyone is using strtotime() and date() functions, I will show DateTime example:
$dt = DateTime::createFromFormat('!m', $result['month']);
echo $dt->format('F');
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
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.
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));
...
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
If you just want an array of month names from the beginning of the year to the end eg 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"));
}
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
$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.
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];
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));
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
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.
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');
?>
您只需一行即可完成:
DateTime::createFromFormat('!m', $salary->month)->format('F'); //April
date("F", strtotime($result["month"]))
使用上面的代码
<?php
$month =1;
$convert =DateTime::createFromFormat('!m', $month);
echo $convert->format('F');
?>
$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.
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()
To get month name by providing month number
$month_number = 5;
$monthName = date('F', mktime(0, 0, 0, $month_number, 10));
Where 'F' will return you month name Eg. 'May'
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
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
This respect the LC_TIME
$date = new DateTime('2022-04-05');
$mes = strftime('%B', $date->getTimestamp());
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);
利用:
$name = jdmonthname(gregoriantojd($monthNumber, 1, 1), CAL_MONTH_GREGORIAN_LONG);
You can just use monthname() function in SQL.
SELECT monthname(date_column) from table group by monthname(date_column)
对于php 7.1
$monthyear= date("M Y");
使用本地函数,例如jdmonthname()
:
echo jdmonthname($monthNum, CAL_MONTH_GREGORIAN_LONG);
I figured everyone looking for this answer was probably just trying to avoid writing out the whole if/else statements, so I wrote it out for you so you can copy/paste. The only caveat with this function is that it goes on the actual number of the month, not a 0-indexed number, so January = 1, not 0.
function getMonthString($m){
if($m==1){
return "January";
}else if($m==2){
return "February";
}else if($m==3){
return "March";
}else if($m==4){
return "April";
}else if($m==5){
return "May";
}else if($m==6){
return "June";
}else if($m==7){
return "July";
}else if($m==8){
return "August";
}else if($m==9){
return "September";
}else if($m==10){
return "October";
}else if($m==11){
return "November";
}else if($m==12){
return "December";
}
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.