[英]Convert number to month name in PHP
我有这个 PHP 代码:
$monthNum = sprintf("%02s", $result["month"]);
$monthName = date("F", strtotime($monthNum));
echo $monthName;
但它返回的是December
而不是August
。
$result["month"]
等于 8,因此sprintf
函数添加一个0
使其成为08
。
推荐的方法:
如今,您真的应该将 DateTime 对象用于任何日期/时间数学。 这要求您的 PHP 版本 >= 5.2。 如Glavić 的回答所示,您可以使用以下内容:
$monthNum = 3;
$dateObj = DateTime::createFromFormat('!m', $monthNum);
$monthName = $dateObj->format('F'); // March
!
格式化字符用于将所有内容重置为Unix epoch 。 m
格式字符是月份的数字表示,带有前导零。
替代解决方案:
如果您使用的是较旧的 PHP 版本并且目前无法升级,您可以使用此解决方案。 date()
函数的第二个参数接受时间戳,您可以使用mktime()
创建一个,如下所示:
$monthNum = 3;
$monthName = date('F', mktime(0, 0, 0, $monthNum, 10)); // March
如果您想要 3 个字母的月份名称,例如Mar
,请将F
更改为M
。 可以在PHP 手册文档中找到所有可用格式选项的列表。
正因为每个人都在使用 strtotime() 和 date() 函数,所以我将展示DateTime示例:
$dt = DateTime::createFromFormat('!m', $result['month']);
echo $dt->format('F');
使用mktime()
:
<?php
$monthNum = 5;
$monthName = date("F", mktime(0, 0, 0, $monthNum, 10));
echo $monthName; // Output: May
?>
请参阅 PHP 手册:http: //php.net/mktime
要针对当前语言环境进行转换,可以使用strftime
函数:
setlocale(LC_TIME, 'fr_FR.UTF-8');
$monthName = strftime('%B', mktime(0, 0, 0, $monthNumber));
date
不尊重语言环境, strftime
确实如此。
strtotime
需要标准日期格式,并传回时间戳。
您似乎正在传递strtotime
一个数字来输出日期格式。
您应该使用将日期元素作为参数的mktime
。
$monthNum = sprintf("%02s", $result["month"]);
$monthName = date("F", mktime(null, null, null, $monthNum));
echo $monthName;
但是,mktime 函数不需要在月份数字前加上前导零,因此第一行完全没有必要,并且可以将$result["month"]
直接传递给函数。
然后可以将它们全部组合成一行,与内联日期相呼应。
echo date("F", mktime(null, null, null, $result["month"], 1));
...
有很多方法可以从给定的数字打印一个月。 为您挑选一间套房。
1. date() 函数和参数 'F'
代码示例:
$month_num = 10;
echo date("F", mktime(0, 0, 0, $month_num, 10)); //output: October
2. 通过使用 createFromFormat() 创建 php 日期对象
代码示例
$dateObj = DateTime::createFromFormat('!m', $monthNum);
echo "month name: ".$dateObj->format('F'); // Output: October
3. strtotime() 函数
echo date("F", strtotime('00-'.$monthNum.'-01')); // Output: October
4. mktime() 函数
echo date("F", mktime(null, null, null, $monthNum)); // Output: October
5. 通过使用 jdmonthname()
$jd=gregoriantojd($monthNum,10,2019);
echo jdmonthname($jd,0); // Output: Oct
如果您只想要从年初到年底的月份名称数组,例如填充下拉选择,我将使用以下内容;
for ($i = 0; $i < 12; ++$i) {
$months[$m] = $m = date("F", strtotime("January +$i months"));
}
如果您有月份编号,您可以首先从中创建一个日期,默认日期为 1st,默认年份为当年,然后从创建的日期中提取月份名称:
echo date("F", strtotime(date("Y") ."-". $i ."-01"))
此代码假定您将月份数存储在 $i
$monthNum = 5;
$monthName = date("F", mktime(0, 0, 0, $monthNum, 10));
我在https://css-tricks.com/snippets/php/change-month-number-to-month-name/上找到了它,它运行良好。
根据需要进行调整
$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];
您需要使用strtotime
或mktime
设置字段
echo date("F", strtotime('00-'.$result["month"].'-01'));
使用mktime
仅设置月份。 试试这个:
echo date("F", mktime(0, 0, 0, $result["month"], 1));
这很简单,为什么这么多人提出如此糟糕的建议? @Bora 是最接近的,但这是最强大的
/***
* returns the month in words for a given month number
*/
date("F", strtotime(date("Y")."-".$month."-01"));
这是这样做的方法
我目前正在使用以下解决方案来解决相同的问题:
//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;
要了解有关设置区域设置的更多信息,请访问http://php.net/manual/en/function.setlocale.php
要了解有关 strftime 的更多信息,请访问http://php.net/manual/en/function.strftime.php
Ucfirst()
用于将字符串中的第一个字母大写。
这可以满足日期时间转换的所有需求
<?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');
这提取了几个月。
我认为使用 cal_info() 是从数字转换为字符串的最简单方法。
$monthNum = sprintf("%02s", $result["month"]); //Returns `08`
$monthName = cal_info(0); //Returns Gregorian (Western) calendar array
$monthName = $monthName[months][$monthNum];
echo $monthName; //Returns "August"
请参阅cal_info()的文档
通过提供月份号获取月份名称
$ month_number = 5;
$ monthName = date('F',mktime(0,0,0,$ month_number,10));
“ F”将返回您的月份名称,例如。 '可以'
我就是这样做的
// 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;
30 June 2019
回归
这里有一个简单的技巧,您可以根据需要使用 strtotime() 函数,将数字转换为月份名称。
1.如果您想要一月、二月和三月的结果然后尝试下面的一个,在日期内使用“M”作为参数。
$month=5;
$nmonth = date('M',strtotime("01-".$month."-".date("Y")));
echo $nmonth;
输出:五月
/2。 您可以尝试使用“F”而不是“M”来获取完整的月份名称作为输出 January February March 等。
$month=1;
$nmonth = date('M',strtotime("01-".$month."-".date("Y")));
echo $nmonth;
输出:一月
这尊重 LC_TIME
$date = new DateTime('2022-04-05');
$mes = strftime('%B', $date->getTimestamp());
我的方法
$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);
您可以只在SQL中使用monthname()函数。
从表组中按月名(date_column)选择月名(date_column)
对于php 7.1
$monthyear= date("M Y");
使用本地函数,例如jdmonthname()
:
echo jdmonthname($monthNum, CAL_MONTH_GREGORIAN_LONG);
我认为寻找这个答案的每个人都可能只是想避免写出整个 if/else 语句,所以我为您写了它,以便您可以复制/粘贴。 此函数唯一需要注意的是,它使用月份的实际数字,而不是索引为 0 的数字,因此一月 = 1,而不是 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";
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.