Intereting Posts
Magento получает код языка в файле шаблона Возврат пользователей с помощью API paypal rest Что можно использовать для DateTime :: diff () для PHP 5.2? получить категорию третьего уровня в opencart Magento: отображать продукты из дочерних категорий, если родительская категория пуста Запуск PHP-скрипта непосредственно в PhpStorm json_encode (): Недопустимая последовательность UTF-8 в аргументе Запуск и остановка PHP-скрипта с веб-страницы администрирования Как вычислить / сгенерировать строку со всеми возможными значениями в массиве? Получение улицы, города и страны путем обратного геокодирования с помощью Google Как получить снимок или миниатюру веб-страницы с помощью PHP? WordPress, как установить длину выдержки сообщения до 100 символов и 200 символов Драйвер mysqlnd имеет только одно расширение api (pdo_mysql) Показать активную боковую панель в WordPress php – это скомпилированный язык или интерпретируемый язык?

Преобразование числа в месяц в 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. Как показано в ответе Главича , вы можете использовать следующее:

 $monthNum = 3; $dateObj = DateTime::createFromFormat('!m', $monthNum); $monthName = $dateObj->format('F'); // March 

! символ форматирования используется для сброса всех значений в эпоху Unix . Символ m – это числовое представление месяца с начальными нулями.

Альтернативное решение:

Если вы используете более старую версию PHP и не можете обновить ее на данный момент, вы можете это решение. Второй параметр функции date() принимает временную метку, и вы можете использовать mktime() для ее создания, например:

 $monthNum = 3; $monthName = date('F', mktime(0, 0, 0, $monthNum, 10)); // March 

Если вы хотите использовать трехмесячное название месяца, например 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 времени.

Кажется, вы передаете 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)); 

Чтобы выполнить преобразование в отношении текущей локали, вы можете использовать функцию strtotime :

 setlocale(LC_TIME, 'fr_FR.UTF-8'); $monthName = strftime('%B', mktime(0, 0, 0, $monthNumber)); 

date не соответствует языку, strtotime делает.

при необходимости адаптироваться

 $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)); 

Если вам просто нужен массив имен месяцев с начала года до конца, например, чтобы заполнить раскрывающийся список, я просто использовал бы следующее:

 for ($i = 0; $i < 12; ++$i) { $months[$m] = $m = date("F", strtotime("January +$i months")); } 
 date("F", strtotime($result["month"])) 

используйте приведенный выше код

это тривиально легко, почему так много людей делают такие плохие предложения? @Bora был самым близким, но это самый надежный

 /*** * returns the month in words for a given month number */ date("F", strtotime(date("Y")."-".$month."-01")); 

это способ сделать это

Если у вас есть номер месяца, вы можете сначала создать дату из него с датой по умолчанию 1-го и по умолчанию года текущего года, а затем извлечь имя месяца с созданной даты:

 echo date("F", strtotime(date("Y") ."-". $i ."-01")) 

Этот код предполагает, что у вас есть номер месяца, хранящийся в $ i

Надеюсь, это поможет кому-то

Я думаю, что использование 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 ()

Использование:

 $name = jdmonthname(gregoriantojd($monthNumber, 1, 1), 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"; } } 

В настоящее время я использую решение ниже для решения той же проблемы:

 //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() используется для заглавной буквы первой строки в строке.

 $monthNum = 5; $monthName = date("F", mktime(0, 0, 0, $monthNum, 10)); 

Я нашел это на https://css-tricks.com/snippets/php/change-month-number-to-month-name/, и он отлично работал.

Используйте встроенную функцию, такую ​​как jdmonthname() :

 echo jdmonthname($monthNum, CAL_MONTH_GREGORIAN_LONG);