18 ответов:
рекомендуемый способ сделать это:
в настоящее время вы действительно должны использовать объекты DateTime для любой даты/времени math. Для этого необходимо иметь версию PHP >= 5.2. Как показано в Glavić это!--15-->, вы можете использовать следующее:
$monthNum = 3; $dateObj = DateTime::createFromFormat('!m', $monthNum); $monthName = $dateObj->format('F'); // MarchThe
!форматирование символов используется для сброса всего в эпохи Unix. Элемент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
strtotimeожидает стандартный формат даты, и возвращает метку времени.Вы, кажется, передает
strtotimeодна цифра для вывода формата даты из.вы должны использовать
mktimeкоторая принимает даты в качестве параметров.ваш полный код:
$monthNum = sprintf("%02s", $result["month"]); $monthName = date("F", mktime(null, null, null, $monthNum)); echo $monthName;однако функция mktime не требует ведущего нуля к номеру месяца, поэтому первая строка полностью ненужный, и
$result["month"]можно передать прямо в функцию.затем все это можно объединить в одну строку, повторяя дату inline.
ваш рефакторинг кода:
echo date("F", mktime(null, null, null, $result["month"], 1));...
преобразование в отношении текущей локали, вы можете использовать
strftimeфункция:setlocale(LC_TIME, 'fr_FR.UTF-8'); $monthName = strftime('%B', mktime(0, 0, 0, $monthNumber));
dateне уважает язык,strftimeделает.
Если вы просто хотите массив имен месяцев с начала года до конца, например, чтобы заполнить выпадающий выбор, я бы просто использовал следующее;
for ($i = 0; $i < 12; ++$i) { $months[$m] = $m = date("F", strtotime("January +$i months")); }
Если у вас есть номер месяца, вы можете сначала создать дату из него с датой по умолчанию 1-го и года по умолчанию текущего года, а затем извлечь имя месяца из даты создания:
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/ и это сработало отлично.
вам нужно установить поля с
strtotimeилиmktimeecho date("F", strtotime('00-'.$result["month"].'-01'));С
mktimeустановить только месяц. Попробуйте вот это:echo date("F", mktime(0, 0, 0, $result["month"], 1));
адаптироваться по мере необходимости
$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];
это тривиально легко, почему так много людей делают такие плохие предложения? @Бора был самым близким, но это самый надежный
/*** * 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;чтобы узнать больше о set locale перейдите в http://php.net/manual/en/function.setlocale.php
чтобы узнать больше о strftime перейдите в http://php.net/manual/en/function.strftime.php
Ucfirst()используется для заглавной буквы первой буквы в строке.
Я думаю, что использование 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"посмотреть docs for cal_info ()
Я знаю, что этот вопрос был задан некоторое время назад, но я понял, что все, кто ищет этот ответ, вероятно, просто пытаются избежать написания всего заявления 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"; } }
вы можете просто использовать функцию monthname () в SQL.
выберите monthname(date_column) из группы таблиц по monthname (date_column)
используйте собственную функцию, такую как
jdmonthname():echo jdmonthname($monthNum, CAL_MONTH_GREGORIAN_LONG);
Comments